如何在 package.json 中动态选择包管理器
Posted
技术标签:
【中文标题】如何在 package.json 中动态选择包管理器【英文标题】:how to dynamically select package manager in package.json 【发布时间】:2017-09-11 07:42:16 【问题描述】:我目前使用yarn
作为我的包管理器,但我团队中的一些人可能仍然使用npm
。我在package.json
写了几个脚本
"scripts":
"clear": "rm -Rf app/javascripts/* & rm index.html",
"watch": "yarn clear | NODE_ENV=development webpack -w --env.dev",
"build": "yarn clear && yarn dev && yarn start",
"dev": "yarn clear | NODE_ENV=development webpack --env.dev",
"prod": "yarn clear | NODE_ENV=production webpack --progress --env.prod"
如果我想在其他脚本中调用clear
,我必须使用npm clear
或yarn clear
。由于当前编写的脚本,没有安装yarn
的人会遇到错误。
有没有办法让我写这个package.json
,这样无论有人运行npm build
还是yarn build
,它都能正常工作,并且它会使用他们选择的包管理器?
【问题讨论】:
【参考方案1】:您可以使用变量npm_execpath
,它将指向用于运行脚本的包管理器。
例如这会输出yarn
或npm
的版本:
"scripts":
"version": "$npm_execpath -v",
$ npm run version
> 3.10.10
$ yarn run version
> 0.21.3
【讨论】:
以上是关于如何在 package.json 中动态选择包管理器的主要内容,如果未能解决你的问题,请参考以下文章
package.json 与 package-lock.json 的关系
npm包信息写入package.json文件时,-D和-S的区别
如何修复 package-lock.json 中未在 package.json 中列出的易受攻击的 npm 包?