对于package.json这个文件,我们并不能只知道依赖与开发依赖,丰富了解,善用package.json可以让我们的应用更改健壮,开发更高效
强制开发者使用yarn而不是npm进行装包
总有那些不细心观察项目的人使用npm进行装包,最好的办法不是文档,而是自动检测。
添加 script
package.json1
2
3
4
5
"scripts": {
"preinstall": "node ./scripts/checkYarn.js"
}- npm 会在装包命令启动前执行该script.
- preinstall,prepublish是内置的一些钩子,当然实际上开发中我们会丰富拓展我们自己的比如start,build之类的。
checkYarn.js
1
2
3
4
5
6
7
8
if (!/yarn\.js$/.test(process.env.npm_execpath || '')) {
console.warn(
'\u001b[33mThis repository requires Yarn 1.x for scripts to work properly.\u001b[39m\n'
)
process.exit(1)
}
当使用npm install直接报错。
限制node,yarn版本
开发环境的版本不一致会是个问题,比如之前yarn1.0之前,对于安装包,部分没有哈希值指纹,假如大家的yarn包不一致,一旦装包,这个文件反复在变。所以保证开发环境一致极端重要。
package.json
1 | "engines": { |
注意,版本号也是个闭区间比如“10.15.0-10.16.0”。
License
如果仓库设置了private:true
,则协议字段license可以不用设定,npm会忽视该设定,如果没有,则需要进行设定为任何一个协议,比如MIT,否则打包时会报错如下。
No license field
注意,有时提示的协议缺失说的并不一定是项目根路径下的package.json文件,而是系统用户目录下的等。具体是哪个文件可以根据错误提示确定即可。
嵌套依赖包版本
有时想修改嵌套依赖包版本,解决办法是增加resolutions字段。配置如下,这里举例子修改trim包
1 | "resolutions": { |
如果是使用package-lock.json管理版本依赖,还需配置hook。如果是yarn.lock,上述配置即可
1 | "scripts": { |
install github repo
有时想安装的JS模块没有发布包,这时就需要能够安装GitHub repo作为包来进行管理。npm是提供支持的。
举例子如下,我想安装osstech-jp/forge下ecdsa分支的代码。
1 | npm i osstech-jp/forge#ecdsa |
参考文档 https://docs.npmjs.com/cli/v8/commands/npm-install
自定义字段支持
npm package.json支持自定义字段,如果是在JS中使用,可以require使用即可。
比如如下自定义字段
1 | "chainConfig": { |
需要注意几点
- 字段名称建议使用一个顶级自定义字段,之后嵌套来定义N个字段,避免前缀为
_
和$
,该前缀被包注册机制占用。 - 顶级字段名称避免与包机制的保留字冲突,比如name,scripts,_id等