刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
当我们遇到以下情况时,通常是由于环境版本不一致导致的:
package-lock.json
频繁冲突这些问题的根本原因往往是:
package-lock.json
格式(lockfileVersion
)不同**推荐使用nvm(Node Version Manager)**:
# 项目根目录创建.nvmrc文件
echo "16.13.0" > .nvmrc
# 使用对应版本
nvm use
在package.json中指定引擎版本:
{
"engines": {
"node": "~16.13.0",
"npm": "~8.1.0"
}
}
并在.npmrc
中启用严格模式:
# .npmrc
engine-strict=true
在package.json中添加:
{
"scripts": {
"preinstall": "npx only-allow npm"
}
}
创建验证脚本checkLockfile.js
:
// misc/checkLockfile.js
const { lockfileVersion } = require('../package-lock.json');
const { engines } = require('../package');
if (lockfileVersion !== 2) {
console.error(`请使用Node ${engines.node}和npm ${engines.npm}版本,然后重新运行npm install`);
process.exit(1);
}
在package.json中添加:
{
"scripts": {
"check:lockfile": "node ./misc/checkLockfile",
"predev": "npm run check:node",
"prebuild": "npm run check:node",
"check:node": "node ./misc/checkNode"
}
}
创建checkNode.js
脚本:
// misc/checkNode.js
const { engines } = require('../package');
const semver = require('semver');
if (!semver.satisfies(process.version, engines.node)) {
console.error(`需要Node版本${engines.node},当前版本: ${process.version}`);
process.exit(1);
}
.npmrc
中添加:enable-pre-post-scripts=true
npm install lodash
),上述方法可能无法拦截,需通过Git hooks(如husky)在提交前验证通过以上措施,可以:
package-lock.json
冲突