限制项目node版本和包管理工具
起因
以前在项目开发的过程中,习惯将对应记录项目依赖的lock文件加入到.gitignore
中,忽略lock文件。为什么这样?在第一家公司实习的时候他们就是这么做的,当时的我也没有细究,具体原因是多人合作时 package-lock
频繁冲突。
后来
在我第二家公司实习时,lock文件是不被忽略的,后续我也了解了package-lock.json
文件的重要性。
它记录了当前项目中安装的每个软件包的确切版本号,以及它们之间的依赖关系。这有助于确保在不同环境中构建项目时安装的软件包版本保持一致,避免了由于不同环境下安装不同版本的软件包而导致的问题。因此,package-lock.json 文件在项目中应该被版本控制系统(如Git)跟踪,以确保团队成员之间的一致性。
那我们要怎么确保项目成员之间的package-lock.json
一致呢?这就涉及到项目成员的node版本和对应包管理器的版本,npm
、yarn
、pnpm
等。
如何限制项目的node版本
可以在package.json
文件中加入如下配置,来限制项目的node版本。这对pnpm和yarn是起作用的。
json
"engines": {
"node": "14.16.1", // 这里还涉及到依赖的版本号前的符号,如“^”、"~"。
"npm": "6.14.12"
},
对于npm来说可能还需要在.nrmrc文件中加入如下配置。
# 开启严格模式
engine-strict = true
ok~限制我们成功的限制了我们项目的node版本和包管理工具的版本。那么我们如何限制我们项目使用的包管理工具呢?
限制项目的包管理工具
这里我们可以利用npm默认的钩子preinstall
,在执行install
命令之前触发。
json
"scripts": {
"preinstall": "npx only-allow pnpm",
}
这里我们设置了在执行install命令之前,通过npm只带的npx命令执行 only-allow
这个包,同时参数为pnpm,来检查当前下载依赖使用的包管理器是否为pnpm。
这在vue3点源码 vue/core
中有所体现。
查看文章: