与 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。如何使这种表达依赖关系的方法同时适用于npmyarn

【问题讨论】:

【参考方案1】:

$npm_execpath 环境变量指的是构建工具,所以只需将npm 替换为$npm_execpath


  "test": "$npm_execpath run lint && mocha"

npm testyarn 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 有啥区别?

yarn 和 npm 的区别

将 Lerna 与 Yarn 工作区一起使用有啥优势吗?

yarn依赖管理工具的使用

如何将`yarn.lock`与`package.json`同步?

第878期Node, NPM, Yarn 和 package.json