如何在 package.json 中动态 select 包管理器
how to dynamically select package manager in package.json
我目前使用 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
,它都能正常工作,而且它会使用他们选择的包管理器?
您可以使用变量 npm_execpath
,它将指向用于 运行 脚本的包管理器。
例如,这将输出 yarn
或 npm
的版本:
"scripts": {
"version": "$npm_execpath -v",
}
$ npm run version
> 3.10.10
$ yarn run version
> 0.21.3
我目前使用 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
,它都能正常工作,而且它会使用他们选择的包管理器?
您可以使用变量 npm_execpath
,它将指向用于 运行 脚本的包管理器。
例如,这将输出 yarn
或 npm
的版本:
"scripts": {
"version": "$npm_execpath -v",
}
$ npm run version
> 3.10.10
$ yarn run version
> 0.21.3