如何统一前端项目的 Node 版本和包管理器?
在我们日常开发的项目中,可能成员们的机器所使用的Node.js版本不统一:守旧派用12.x、保守用14.x、激进用17.x,项目能否正常跑起来全凭天意,包管理器也是一样,有人习惯用npm、用人习惯用yarn,代码库里经常存在package-lock.json、yarn.lock文件同时存在的情况,更痛的点还是各种奇奇怪怪的问题排查起来完全没有头绪。所以我们要做的是:锁定Node.js版本和包管理器。
一、锁定项目Node版本
通过在项目的package.json中指定engines字段,可限定项目使用的Node版本。下面配置仅允许用户使用14或者16的版本。更多的配置可以参考package.json|npm Docs、semver
// package.json "engines":{ "node":"14.x || 16.x" }
配置之后你会发现,该字段只对yarn生效。那如何对npm也生效呢?在项目根目录下的.npmrc文件中增加如下配置
// .npmrc engine-strict = true
以上配置完成后,使用npm install的时候,如果是错误的Node.js版本将直接退出
二、锁定包管理器
利用only-allow工具包、npm scripts 快速实现锁定。
步骤一:在项目中npm install only-allow -D
步骤二:在package.json文件中进行配置scripts.preinstall,允许输入的值only-allow npm、only-allow pnpm、only-allow yarn
// package.json "scripts":{ "preinstall":"only-allow npm" }
以上配置完成后,可以再乱用(yarn、npm、pnpm)试试。