属性目录
package.json
package.json
作为项目(模块)的描述文件,需要了解其各属性的作用是什么。总结如下:
name
{ String }
项目名称。
如果想将项目发布到 npm 上去的话,该属性必需,且保证该 name 没有被占用。
命名规则:
- 长度小于等于 214 个字符
- 不能以点(
.
)或下划线(_
)开头 - 新的包不能有大写字母
- 因为包名会被用作:URL 的一部分;命令行的参数;文件夹名。所以,包名不能包含非法字符
官方建议:
- 不要使用和 Node 核心模块一样的名称
- 包名中不要包含
js
、node
等字眼。默认就是 js 文件,引擎也可以通过engines
字段指定 - 包名起了是给别人用的,所以最好短点,且见名知意
- 如果你想将项目发布到 npm 上的话,包名必需且唯一。所以起名之前最好先去官网查查有没有重名
此外,包还可以加前缀,将包放到同意的命名空间下(如 babel7),如:@myorg/mypackage
。详见 npm-scope。
version
{ String }
项目版本号。
如果想将项目发布到 npm 上去的话,版本号必需,且和 name 组成唯一确定的包文件。
如果想升级项目并发布,只能更改版本号。
npm 的版本号是使用 node-semver 模块解析的。
格式采用 {major}.{feature}.{patch} (主版本 . 次要版本 . 补丁版本)模式:
- patch:修复 bug
- feature:新增功能
- major:重构 API
description
{ String }
项目描述,可用于 npm 官网搜索。
keywords
{ String }
项目关键字,可用于 npm 官网搜索。
homepage
{ String }
项目官网地址。
bugs
{ String | Object }
提交项目 bug 的方式。格式如下:
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
属性解释:
- url:提交 issue 的地址
- email:联系邮箱
这两个值都非必填,如果只提供 url 地址,可以写成如下格式:
"bugs" : "https://github.com/owner/project/issues"
如果提供了 url,npm bugs
命令会使用这个地址。
license
{ String | Object }
项目 license 类型。
除了设置合适的 license 类型外,还可以设置 "private": true
来避免项目发布。
author
{ String | Object }
项目作者,只能存在一个作者。
当属性为 Object 时,格式为:
{
"name" : "Barney Rubble",
"email" : "b@rubble.com",
"url" : "http://barnyrubble.tumblr.com/"
}
当属性为 String 时,格式为:
"author" : "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
contributors
{ Array }
贡献者,有多个。
列表中的元素和 author 格式一致。
maintainers
{ Array }
维护者,同 contributors
。
files
{ Array | String }
默认:"*"
当别人安装你的包时,所需要安装的文件。
遵循以下规则:
- 命名规则和
.gitignore
一样,可以是个文件,也可以是文件夹,且支持 glob 规则(如*
、**/*
等) - 可以在根目录添加
.npmignore
文件来排除一些文件和文件夹 - 如果
.npmignore
缺省,将使用.gitignore
来代替 - 不同通过
.npmignore
或.gitignore
来排除files
属性里面包含的文件
不管如何配置,以下文件会始终会包含到包中:
- package.json
- README
- CHANGES / CHANGELOG / HISTORY
- LICENSE / LICENCE
- NOTICE
- The file in the
“main”
field
README, CHANGES, LICENSE & NOTICE 支持任何后缀。
不管如何配置,以下文件会始终不会包含到包中:
- .git
- CVS
- .svn
- .hg
- .lock-wscript
- .wafpickle-N
- .*.swp
- .DS_Store
- ._*
- npm-debug.log
- .npmrc
- node_modules
- config.gypi
- *.orig
- package-lock.json (use shrinkwrap instead)
main
{ String }
默认:"./index.js"
其他项目引用该项目的时的入口文件。
如:你的项目名是:foo,package.json 中 "main" : "lib/index.js"
。当其他项目引用你项目时(require('foo')