Skip to content

限制项目node版本和包管理工具

起因

以前在项目开发的过程中,习惯将对应记录项目依赖的lock文件加入到.gitignore中,忽略lock文件。为什么这样?在第一家公司实习的时候他们就是这么做的,当时的我也没有细究,具体原因是多人合作时 package-lock 频繁冲突。

后来

在我第二家公司实习时,lock文件是不被忽略的,后续我也了解了package-lock.json文件的重要性。

它记录了当前项目中安装的每个软件包的确切版本号,以及它们之间的依赖关系。这有助于确保在不同环境中构建项目时安装的软件包版本保持一致,避免了由于不同环境下安装不同版本的软件包而导致的问题。因此,package-lock.json 文件在项目中应该被版本控制系统(如Git)跟踪,以确保团队成员之间的一致性。

那我们要怎么确保项目成员之间的package-lock.json一致呢?这就涉及到项目成员的node版本和对应包管理器的版本,npmyarnpnpm等。

如何限制项目的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中有所体现。

查看文章:

  1. 如何限制项目使用指定的node版本

  2. NPM常用命令和钩子