package.json 属性

name

package.json 中最重要的属性是 name 和 version. 这两个属性是必须要有的, 否则模块无法被安装. 这两个属性一起形成了一个 npm 模块的唯一标识符.
模块中内容变化的同时, 模块版本也应该一起变化.
name 属性就是你的模块名称, 下面是一些命名规则:

  • name 必须小于等于214字节, 包括前缀名称在内(如../..module)
  • name 不能以’_’或’.’开头
  • 不能有大写字母
  • name 会成为 url 的一部分, 不能有 url 非法字符
  • 不要使用和 node 核心模块一样的名称
  • name 中不要有 ‘js’ 和 ‘node’

version

version 必须可以被 npm 依赖的一个 node-server 模块解析

description

一个描述, 方便别人了解你的模块的作用, 搜索的时候也有用

keywords

一个字符串数组, 方便别人搜到本模块

homepage

项目主页 url
注意: 这个项目主页 url 和 url 属性不同, npm 注册工具会认为你把项目发布到其他地方了, 获取模块的时候不是从官方仓库后去, 而是去 url 配置的地址

bugs

填写一个提交 bug 的地址或邮箱

{
 'url': 'https://www.ezcook.de/project/issue',
 'email': 'project@ezcook.de'
}
`</pre>

如果只填写一个, 可以返回字符串而不是对象

### license

为模块制定一个协议, 通知用户可以使用的权限, 最常见的是 BSD-3-Clause 或 MIT

<pre>`{'license': 'MIT'}
`</pre>

### author, contributors

### files

files 属性的值是一个数组, 内容是模块下文件名或文件夹名, 如果是文件夹名, 则文件夹下所有文件也会被包含.
可以在模块根目录下创建一个 '.npmignore' 文件, 写在这个文件里的文件会被排除在 file 属性

### main

main 属性指定程序的主入口文件, 比如这个模块(文件夹)命名为'foo', package.json中' main' 属性指定为'test.js', 则通过 require(foo)来使用模块的时候会滴啊用 test.js 脚本.
他应该指向模块根目录下得一个文件, 默认为 index.js

### bin

很多模块有一个或多个需要配置到 PATH 路径下的可执行模块...

### man

制定一个或通过数组指定一些文件夹让 linux 下的 man 指令查找文档地址

### directories

### repository

指定一个代码存放的地址

<pre>`'repository':
{
  'type':'git',
  'url':'https://github.com/...'
}

如果是 Github, 可以用缩写完成
‘repository’:’gist:…’`

scripts

scripts 属性是一个对象, 里面制定了项目的生命周期各个环节需要执行的命令, key 是生命周期中的时间, value 是要执行的命令
具体内容有 install, start, stop 等, 详情见npm/scripts

config

用来设置一些项目不怎么变化的项目配置, 如 port 等

dependencies

dependencies 属性是一个对象, 配置依赖模块的模块列表, key 是模块名称, vlaue 是版本范围, 版本范围是一个字符, 可以被一个或多个空格分隔.
比如
`
‘dependencies’:
{
‘foo’:’1.0.0 - 2.0.0’
‘foo1’:’>=1.0.0’
}

devDependencies

如果有人想下载并使用你的模块, 也许他们并不希望或需要下载一些你在开发过程中额外的测试或文档框架
这种情况下最好把这些依赖添加到 devDependencies 中, 这些模块会在 npm link 或者 npm install 的时候被安装, 也可以像其他 npm 配置一样被管理

使用 Npm 创建新工程

创建一个工程目录, 并 cd 到目录中, 运行
$npm init
这个工具将引导你创建一个 package.json 文件, 他只覆盖了大多数一般的项目, 并尽量让默认内容全面.
运行npm help json 获取 package.json 中的各个字段的文档及其定义
后面可以用
npm install &lt;pkg&gt; --save
来安装一个包并将其存储为 package.json 文件中的一个依赖模块
任何时间按下^C 退出.
简单来说:
npm init 创建或修改一个项目中的 package.json 文件
默认名称(显示在括号中)是当前文件夹的名字, 如果对于提示不输入任何字符并按下 Enter 键, npm 会将默认名称当做项目名称.
在完成提示内容后, npm init 将会给你一个即将创建的 package.json 文件的预览, 对于我们来说, 他看起来是这样的

{
"name":"project-name",
"version":"0.0.0",
"description":"...",
"main":"index.js",
"scripts":{
  "test":"echo \"Error:no test specified\" &amp;&amp; exit 1"
},
"keywords":["npm","example"],
"author":"YourName","license":"MIT"
}
`</pre>

按下 Enter 进行确认, 你可以在后面随时修改, 通过编辑 package.json 或再次运行 npm init.
npm init 永远也不会移除你放在 package.json 中的信息, 仅仅根据需求进行调整.

### package.json

一个项目的 package.json 文件担任下列角色
- 他为 npm 提供一切信息
- 他告诉 Node 怎样处理一个包
- 他为人们查看项目提供一个进入点

### 创建一个包进入点

现在创建一个非常简单的脚本并将它存为 index.js

<pre>`//index.js
console.log("Hello, npm");
`</pre>

我们可以直接运行脚本

<pre>`$node index.js
Hello, npm
`</pre>

我们可以通过使用 require, 在其他的 Node 应用中应用这段脚本. 首先进入 Node REPL, 一个交互的命令行环境:

<pre>`$node
&gt; require('./index.js')
Hello, npm
{}
`</pre>

({}是 require 的返回值, 在这个例子中, 他是 index.js 的 exports 对象)
Node 允许我们省略.js 扩展名, 因此我们可以简写为 require(',/index').
如果我们在同一个 REPL 会话中再次运行 require, 我们将得到相同的返回值, 但是不会得到 console.log 输出, 因为 require 不会在同一个脚本中运行两次.
./在./index 中很重要, 因为他告诉 Node 这个路径是当前文件夹的相对路径. 如果我们不显示给出绝对路径或相对路径, 而是直接给 index, Node 会在一系列文件夹中寻找匹配的模块.

回顾一下, 在 package.json 文件夹中, 'main':'index.js' 的作用是什么?
当你 require 一个包含指向 main 脚本('main':'index.js')的 package.json 文件的文件夹时, Node 会认为你是在 require 这个脚本('index.js'), 所以前面的代码可以简写为

<pre>`require(./)
`</pre>

现在我们可以使用 package.json 来完成上面的工作, 因为我们的脚本命名为 index.js, 他是一个文件夹的默认脚本

### 第一个依赖模块

使用下面的命令来快速搜索 npm registry
`$npm search color`
如果想要获得更多的信息, 可以跳转到 npmjs.org, 在"最多依赖"的列表中可以查看流行的库
安装依赖模块
`$npm install --save colors`
这条指令会在本地文件夹中创建一个名为 node_modules 的文件夹并将 colors 下载到其中. `--save`将依赖模块自动加入到 package.json 文件中.

<pre>`"dependencies"{
  "colors":"~0.6.0-1"
}
`</pre>

现在我们来重写 index.js 来使用我们的新库. colors 扩展了 String 的原型因此我们可以非常简洁的表达带有颜色的文本:

<pre>`var colors = require('colors');
console.log('Hello, '.red,'npm'.green);

运行 index.js 文件, 你将在原来的输出中获得一个彩色字符串

node_modules 的层级

当不显示指定相对路径或绝对路径时, Node 首先查找本地的 ndoe_modules 文件夹, 当你使用 npm install 指令的时候这个文件夹被自动创建. 当 Node 发现 node_modules 下有一个叫做 colors 子目录时, Node 将他当做 require 的目标.
查看 node_modules/colors/package.json, 可以找到’main’:’colors’ , 因此 require colors这个文件夹时 Node 会认为 require 了 colors.js 这个脚本
然后从 require 函数中返回脚本中的 exports 对象.
如果找不到 colors 目录, 则会一直搜索到系统的根目录.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×