如何在 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 clearyarn clear。由于当前编写的脚本,未安装 yarn 的人将 运行 出错。

有没有办法让我写这个package.json,这样无论运行是npm build还是yarn build,它都能正常工作,而且它会使用他们选择的包管理器?

您可以使用变量 npm_execpath,它将指向用于 运行 脚本的包管理器。

例如,这将输出 yarnnpm 的版本:

"scripts": {
  "version": "$npm_execpath -v",
}
$ npm run version
> 3.10.10
$ yarn run version
> 0.21.3