与 npm 和 yarn 一起使用的 package.json 脚本?
Posted
技术标签:
【中文标题】与 npm 和 yarn 一起使用的 package.json 脚本?【英文标题】:package.json scripts that work with npm and yarn? 【发布时间】:2017-05-29 14:43:29 【问题描述】:我正在使用npm as a build tool,所以在我的package.json
中,我的一些脚本依赖于其他脚本:
"test": "npm run lint && mocha"
这会将npm
包管理器硬编码为package.json
。如何使这种表达依赖关系的方法同时适用于npm
和yarn
?
【问题讨论】:
【参考方案1】:$npm_execpath
环境变量指的是构建工具,所以只需将npm
替换为$npm_execpath
:
"test": "$npm_execpath run lint && mocha"
npm test
和 yarn test
都可以工作,并且会使用适当的构建工具。
【讨论】:
这对我来说一直很好,直到我不得不在工作中使用 Windows 机器。我在哪里得到错误'$npm_execpath' is not recognized as an internal or external command
有谁知道如何让它在 Windows 上工作?说到那个操作系统,我有点一头雾水。
@rgb 呃,你可能在 Windows 上不走运,我不知道那里的情况如何。
如果$npm_execpath
包含空格,如果您不使用双引号将变量括起来,事情可能会中断。例如"test": "\"$npm_execpath\" run lint && mocha"
Windows 可能与 %npm_execpath%
一起工作,但我还没有测试过。【参考方案2】:
虽然 mjs 的回答很棒,但还有一个小包据称可以在包括 Windows 在内的所有环境中工作:https://www.npmjs.com/package/yarpm
要在项目中使用,请运行 yarn add yarpm --dev
/ npm i -D yarpm
,然后在脚本中使用 yarpm,如下所示:
"test": "yarpm run lint && mocha"
正如包自述文件所述,您只需要确保您的命令适合传递给 either yarn 或 npm:您不能使用仅适用于一个包管理器的参数/标志。
【讨论】:
很好的建议。 yarpm 当前不受支持,yarn-or-npm 是最近的替代方案。以上是关于与 npm 和 yarn 一起使用的 package.json 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
yarn.lock 和 npm 的 package-lock 有啥区别?