package.json 配置说明

name

package.json 文件中最重要的就是 nameversion 字段,这两项是必填的。名称和版本一起构成一个标识符,该标识符被认为是完全唯一的。对包的更改应该与对版本的更改一起进行。

name 必须小于等于214个字符,不能以 ._ 开头,不能有大写字母,因为名称最终成为 URL 的一部分因此不能包含任何非 URL 安全字符。 npm 官方建议我们不要使用与核心 node 模块相同的名称。不要在名称中包含 'js''node'。如果需要可以使用 engines 字段来指定运行环境。

该名称会作为参数传递给 require,因此它应该是简短的,但也需要具有合理的描述性。

version

version 一般的格式是 x.x.x, 并且需要遵循该规则。每次发布时 version 不能与已存在的一致。

description

description 是一个字符串,用于描述你的包信息。有助于人们在 npm 库中搜索的时候发现你的模块。

keywords

keywords 是一个字符串组成的数组,有助于人们在 npm 库中搜索的时候发现你的模块。

homepage

项目的主页地址。

bugs

用于项目问题的反馈,可以包含项目 issue 地址,或者是一个邮箱

"bugs": { 
  "url" : "https://github.com/owner/project/issues",
  "email" : "project@hostname.com"
}

license

当前项目的协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。

author 和 contributors

author 是具体一个人,contributors 表示一群人,他们都表示当前项目的共享者。同时每个人都是一个对象。具有 name 字段和可选的 urlemail 字段。

"author": {
  "name" : "yangss",
  "email" : "yangss@xxx.com",
  "url" : "https://yangss.com/"
}

也可以写成一个字符串:

"author": "yangss yangss@xx.com (https://yangss.com/)"

files

用于指定发布模块时需要包含的文件。files 属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来。

可以在模块根目录下创建一个 .npmignore 文件,写在这个文件里边的文件即便被写在 files 属性里也会被排除在外,这个文件的写法与 .gitignore 类似。

main

指定模块加载的入口文件,require 导入的时候就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js

bin

指定每个内部命令对应的可执行文件的位置。如果你编写的是一个 node 命令行工具时会用到 bin 字段:

"bin": {
  "foo": "bin/foo.js",
}

如果全局安装这个模块,我们在命令行中输入 foo, node 会去执行 bin/foo.js 这个文件。

如果作为项目依赖的方式局部安装这个模块,在 node_modules/.bin/ 生成对应的文件, npm 会寻找这个文件,在node_modules/.bin/ 目录下建立符号链接。由于 node_modules/.bin/ 目录会在运行时加入系统的 PATH 变量,因此在运行 npm 时,就可以不带路径,直接通过命令来调用这些脚本 所有 node_modules/.bin/ 目录下的命令,都可以用 npm run [命令] 的格式运行

directories

制定一些方法来描述模块的结构, 用于告诉用户每个目录在什么位置。

repository

指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助

"repository" : {
  "type" : "git", 
  "url" : "https://github.com/npm/npm.git"
}

scripts

用于配置 npm 脚本命令,可以给项目中需要经常运行的脚本命令定义一个别名:

"scripts": {
  "start": "node ./start.js"
}

scripts 可以直接调用 node_modules 中安装的模块(如果这个模块提供了命令行运行的模式):

"scripts": {
  "build": "webpack"
}
// npm run build => npx webpack

peerDependencies

如果你的模块依赖于某一个模块,但是你又不想将其作为本模块的依赖进行安装(比如这个模块可能被其它很多模块使用),可以使用 peerDependencies 字段来指定这个模块,以及所需要的版本,

{
  "name": "my-less-plugin",
  "peerDependencies": {
    "less": "3.9.x"
  }
}

engines

engines 字段指明了该模块运行的平台,比如 node 或者 npm 的某个版本或者浏览器

"engines": { 
  "node" : ">=0.10.3 <0.12", 
  "npm" : "~1.0.20" 
}

private

如果这个属性被设置为 true,npm 将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。

"private": true

publishConfig

preferGlobal

preferGlobal 的值是布尔值,表示当用户不将该模块安装为全局模块时(即不用--global/-g参数),要不要显示警告,表示该模块的本意就是安装为全局模块。

"preferGlobal": true

config