我们最近改用了Yarn的NPM,但是旧的习惯很难解决,我担心有些开发人员会意外使用yarn install
。
如何防止yarn install
在项目中运行?或者,甚至更好地显示使用npm install
的提醒?
我认为yarn install
可以被preinstall
脚本截获,但是我不确定在preinstall
脚本中寻找什么。
答案 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.