3.2 package.json 文件详解
阅读本文之前,先看下面这个 package.json 的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过;如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本文,你的疑惑一定一个一个都会消。
"private": true,
"dependencies": {
"antd": "^2.11.1",
"classnames": "^2.2.5"
},
"devDependencies": {
"axios": "^0.15.3",
"babel-eslint": "^6.1.2"
},
"bin": {
"dk-cli": "./bin/dk-cli.js"
},
"scripts": {
"start": "node index.js"
},
"engines": {
"node": ">=6.9.0",
"npm": ">=3.10.10"
}
"publishConfig": {
"registry": "http://gongsineibu/nexus/repository/npm-hosted/"
}
1. private
属性
可选字段,布尔值。如果 private 为 true,npm 会拒绝发布。
这可以防止私有 repositories 不小心被发布出去。
2. dependencies
与 devDependencies
问题一:dependencies 与 devDependencies 属性区别?
-
dependencies 指定了项目生产环境时所依赖的模块;
-
devDependencies 制定了项目开发环境时所依赖的模块。
问题二:为什么需要生产/开发两个环境?
举个最简单的例子:
在开发阶段,我们需要对开发的模块进行单元测试,这时在开发环境 devDependencies 下就要安装单元测试模块 Mocha。
在生产环境 dependencies,用户直接使用项目,此时项目的开发已全部完成。这时就不需要单元测试模块了,再加上只会影响性能。
3. bin
属性
如果你需要使用 npm 开发一个命令行工具,那么这个属性就会很有用。否则请跳过以节约你的时间。
bin 属性可以让我们很简单制作命令行工具,具体如何制作可以跳转:使用 bin 属性制作命令行工具
4. scripts
属性
scripts 中文名称为脚本,也就是说可以为我们带来便利。
以上面的配置为例:
scripts 的脚本运行方式是在命令行中输入 npm run <脚本名称>
上图中只有一个 start 值,那么运行时要输入 npm run start
如果不输入脚本,就需要在命令行中输入 node index.js 这行代码
真实情况是输入 node index.js 但是觉得这么太麻烦,就用 npm run start 去代替 node index.js。
5. engines
属性
一直很纳闷一件事,就是怎么通过 package.json 文件就能知道当前项目依赖 node 的哪个版本,依赖 npm 的哪个版本。。。
后来偶然发现,package.json 中已经提供了这个一个属性,用来记录当前项目依赖 node 和 npm 的版本号。写法如下:
"engines": {
"node": ">=6.9.0",
"npm": ">=3.10.10"
}
6.publishConfig
属性
当我们开发完自己的项目想要将它发布到 Npm 仓库就需要使用这个属性。默认情况下我们是往 Npm 公共仓库中发布包,默认地址是:https://www.npmjs.com/
,此时在 package.json
文件中可以不加这个属性。
但是如果公司内部搭建了 Npm 私有仓库,此时发布包就不是往 https://www.npmjs.com/
这个地址上发布了,而是公司内部提供的地址,如:http://gongsineibu/nexus/repository/npm-hosted/
。此时配置如下:
"publishConfig": {
"registry": "http://gongsineibu/nexus/repository/npm-hosted/"
}
补充:
- publicConfig 属性决定了我们发布包发布到哪里去。
- 那么什么决定我们下载包从哪里下载呢?
.npmrc
文件记录从哪里下载包。