package.json中的字段详解
基于的npm版本为8.x。
1、name
npm
包的名字,如果你打算发布你的包,name
是必填的字段,如果你不打算发布你的包,那么name
字段是可选的。一个npm
包是由名字加版本作为唯一标识的。
npm
包的名称必须要小于等于214个字符,除了范围包之外的npm
包名称不允许以'.'和'_'开头,名称中不能有大写字母,由于包名称也是URL中的一部分,所以不能包含任何非URL安全字符。
另外官方建议我们不要和node的某些核心模块取一样的名称,包名中不要有js
以及node
这样的字符。由于我们是需要通过包名引入包,所以包名最好是简短的,描述性合理的。
如果你想要知道包名是否已经被占用,可以去npm官网进行搜索。
2、version
npm
包的版本号,关于版本号的说明可见npm包版本管理
3、description
npm
包的描述,它将展示在npm
包的搜索列表里,帮助其它的开发者在npm
上找到你的包。
4、keywords
npm
包的关键字,是一个字符串数组,它也会展示在npm
包的搜索列表里,用来帮助其它的开发者在npm
上找到你的包。
5、homepage
npm
包的主页地址
6、bugs
你的项目提issue
的地址,或者提供一个邮箱地址可以提交问题。如下:
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
也可以只写其中一项,如果只写一项的话可以直接使用字符串。
7、license
你需要给你的npm
包声明一个许可证,来让用户知道他们的使用权利和限制。许可证类型可见七种开源许可证
8、people fields: author, contributors
npm
包的作者及参与贡献人员。author是单个,contributors是数组。
9、funding
npm
包的赞助信息。
10、files
files
是一个可选项,形式为数组,它描述了你npm publish
的时候推送到npm服务器的文件列表,支持目录和通配,相反的,你可以使用.gitignore
或者.npmignore
来排除不需要上传的文件。
无论怎么设置,有些文件会始终被包含,比如:
- package.json
- README
- LICENSE / LICENCE
- The file in the "main" field
相反的,有些文件总是会被排除,比如:
- .git
- CVS
- .svn
- .hg
- .lock-wscript
- .wafpickle-N
- .*.swp
- .DS_Store
- ._*
- npm-debug.log
- .npmrc
- node_modules
- config.gypi
- *.orig
- package-lock.json (use npm-shrinkwrap.json if you wish it to be published)
11、main
npm
包的入口文件,比如你的包名为foo
,用户安装了这个包,通过require(foo)
导入的时候,实际上导入的就是main
字段的入口文件。如果这个字段没有设置的话,入口文件就默认为根目录下的index.js
文件。
12、browser
如果要在客户端使用模块,则应使用brower
字段来代替main
字段。
13、bin
该属性定义了一系列可执行命令,例如:
"bin": {
"myapp": "./cli.js"
}
上述表示该npm
包定义了一个命令myapp
,执行文件为与命令定义文件同级目录下的cli.js
。局部安装该包后,可执行文件会在./node_modules/.bin
下。全局安装该包后,可执行文件会在$PATH
里对应npm
的目录下。
14、man
这里是manuel
,是手册的意思,指定一个或多个文件,文件名必须已数字结尾,如果是压缩的,需要以.gz
结尾,它用于执行man <pkgname>
时,展现给用户的手册内容。
15、directories
用来展示项目的目录结构信息,字段可以是:lib
、bin
、man
、doc
,值都是字符串。
16、repository
包的仓库地址。如下:
"repository": {
"type": "git",
"url": "https://github.com/npm/cli.git"
}
17、scripts
scripts
用来定义脚本命令,如下:
"scripts":{
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
}
则当你在终端输入npm run serve
命令的时候就会运行该包,输入npm run build
的时候就会执行打包操作。
除此之外,还可以定义一些钩子,比如:
"scripts":{
"prebuild": "{可以定义build之前要执行的操作}",
"preinstall": "{可以定义install之前要执行的操作}"
}
具体的可以看scripts
18、config
添加一些配置,可以供scripts
读取用,同时这里的值也会被添加到系统的环境变量中。
"config": {
"port": "8080"
}
npm start
的时候会读取到npm_package_config_port
环境变量。
19、dependencies
项目运行时所需要的依赖。
20、devDependencies
项目开发时所需要的依赖。
21、peerDependencies
相关的依赖。以上三种依赖的差异可见dependencies、devDependencies、peerDependencies的区别
22、peerDependenciesMeta
当我们安装了peerDependencies
中的依赖,但是版本不一致时,npm会报错,这个时候我们可以采用该字段来给peerDependencies
配置更多的信息。如下:
{
"name": "tea-latte",
"version": "1.3.5",
"peerDependencies": {
"tea": "2.x",
"soy-milk": "1.2"
},
"peerDependenciesMeta": {
"soy-milk": {
"optional": true
}
}
}
当我们把soy-milk
依赖配置成可选的,则安装版本不一致时,npm不会报错。
23、bundledDependencies
绑定的依赖包,发布的时候这些绑定包也会被一同发布。绑定包必须是dependencies
或devDependencies
中声明过的包。
24、optionalDependencies
安装依赖的时候,放在optionalDependencies
中的包即使安装失败,也不会报错终止安装操作。
25、overrides
如果你需要对依赖项中的依赖的版本进行修改,可以使用该字段。
26、engines
指定包运行的环境,如下:
"engines": {
"node": ">=0.10.3 < 0.12",
"npm": "~1.0.20"
}
但是该字段只是建议性的,不满足的时候只会报warning
。
27、os
指定你的包可以在哪些系统平台下运行,如下:
"os": [ "darwin", "linux", "!win32" ]
28、cpu
指定包运行的cpu
架构,如下:
"cpu": [ "x64", "ia32" ]
29、private
该字段设置为true
的话,你的包就不会发布到npm
平台。
30、publishConfig
发布时的一些设定。比如说要发布到的npm
仓库地址,要标记的tag
等。可参考config
31、workspaces
该字段是一个可选的,形式为数组,定义工作区,如下:
"workspaces": [
"./packages/*"
]
只要packages
下的文件夹中有有效的package.json
文件,都会被视为一个工作区。可参考workspaces
参考
1、package.json里的一些属性讲解
2、package.json中的每一个字段你都了解了吗
3、npm中package.json详解
4、package.json