阻止Yarn安装在项目中运行(即强制NPM安装)

时间:2019-08-02 14:33:59

标签: npm npm-install yarnpkg

我们最近改用了Yarn的NPM,但是旧的习惯很难解决,我担心有些开发人员会意外使用yarn install

如何防止yarn install在项目中运行?或者,甚至更好地显示使用npm install的提醒?

我认为yarn install可以被preinstall脚本截获,但是我不确定在preinstall脚本中寻找什么。

2 个答案:

答案 0 :(得分:1)

通过查看环境变量npm_execpath的值,可以查看运行的是Yarn还是NPM。如果您做了类似的事情:

"preinstall": "if [[ $npm_execpath =~ 'yarn' ]]; then echo 'Use NPM!' && exit 1; fi",

然后yarn install(或仅yarn)将在安装步骤之前失败。如果您想跨平台运行,或者不使用* nix,则可以编写一个简单的脚本,例如:

#! /usr/bin/env node

if (process.env.npm_execpath.match(/yarn/)) {
  console.log("Use NPM!");
  process.exit(1);
}

并在preinstall中运行它。

答案 1 :(得分:1)

我想到了另一个选择,利用了以下事实:Yarn将根据$.engines.yarn中的package.json检查其版本。如果您将其设置如下:

{
  ...
  "engines": {
    "yarn": "use npm!"
  }
}

尽管有些隐晦的错误消息,但纱线仍将纾困:

yarn install v{foo}
info No lockfile found.
[1/5] ?  Validating package.json...
error {bar}@{baz}: The engine "yarn" is incompatible with this module. Expected version "use npm!". Got "{foo}"
error Found incompatible module
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.