我想强制使用yarn install而不是npm install。我想在npm install中引发错误。在package.json中我应该做什么?
yarn install
npm install
package.json
f87krz0w1#
更新:Alexander's answer是更好的解决方案,使用的技术与我在这里介绍的相同。我把我的回答巧妙地留给子孙后代。我回答的初衷是要说明您可以执行一个应该在所有平台上运行的小节点脚本。
在你的预安装脚本中,你可以运行一个应该可以在所有平台上运行的迷你节点脚本,而像pgrep(以及其他常见的*nix命令和操作符)这样的东西在Windows 10被广泛采用之前不会在Windows上运行。
pgrep
我在Node v4.7.0(NPM v2.15.11)和Node v7.2.1(NPM v3.10.10)上测试了以下脚本。我想它对介于两者之间的所有东西都有效。它的工作方式是检查当前运行的进程上的环境变量--npm_execpath是当前运行的“npm”脚本的路径。对于Yarn,它应该指向/path/to/yarn/on/your/machine/yarn.js。
npm_execpath
/path/to/yarn/on/your/machine/yarn.js
"scripts": { "preinstall": "node -e "if(process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('You must use Yarn to install, not NPM')"" }
您可以在此处阅读有关NPM脚本的更多信息:https://docs.npmjs.com/misc/scripts
至于npm_execpath环境变量,虽然没有文档记录,但我怀疑它是否会更改。它已经在npm的多个主要版本中出现,但它并没有真正通过*“这个更好的名字”*测试。
npm
1条答案
按热度按时间f87krz0w1#
更新:Alexander's answer是更好的解决方案,使用的技术与我在这里介绍的相同。我把我的回答巧妙地留给子孙后代。我回答的初衷是要说明您可以执行一个应该在所有平台上运行的小节点脚本。
在你的预安装脚本中,你可以运行一个应该可以在所有平台上运行的迷你节点脚本,而像
pgrep
(以及其他常见的*nix命令和操作符)这样的东西在Windows 10被广泛采用之前不会在Windows上运行。我在Node v4.7.0(NPM v2.15.11)和Node v7.2.1(NPM v3.10.10)上测试了以下脚本。我想它对介于两者之间的所有东西都有效。它的工作方式是检查当前运行的进程上的环境变量--
npm_execpath
是当前运行的“npm”脚本的路径。对于Yarn,它应该指向/path/to/yarn/on/your/machine/yarn.js
。您可以在此处阅读有关NPM脚本的更多信息:https://docs.npmjs.com/misc/scripts
至于
npm_execpath
环境变量,虽然没有文档记录,但我怀疑它是否会更改。它已经在npm
的多个主要版本中出现,但它并没有真正通过*“这个更好的名字”*测试。