从另一个package.json运行脚本命令的npm脚本命令

61

我有两个使用npm的单独项目 - 所以我拥有:
some_base_folder/projectA/package.jsonsome_base_folder/projectB/package.json

每个文件都有一个scripts部分。

如果我进入some_base_folder/projectA/并运行npm run-script test,它将执行some_base_folder/projectA/package.json中脚本部分的测试命令,就像它应该做的那样。

我该如何在some_base_folder/projectB/package.json中将"scripts": {test_projectA:'????'的值设置为什么,以便当我在some_base_folder/projectB/中运行npm run-script test_projectA时, 执行Project A的test脚本?

我尝试了../projectA/npm run-script test但是它显示:

```json "scripts": { "test_projectA": "cd ../projectA && npm run-script test" } ```
'..' is not recognized as an internal or external command,
operable program or batch file.

我正在使用Windows 7,但希望找到一个在Linux上也能正常工作的解决方案。

3个回答

85

原来事情非常简单:

"scripts": {
  test_projectA:"cd ../projectA && npm run-script test"
}

我的子进程日志语句好像没有被显示出来。有什么想法吗? - sramzan
你可以使用 --loglevel verbose - yellowsir
另外,还可以参考@yellowsir的答案,使用跨包管理器解决方案(也适用于yarn)。 - sylbru

59

您应该使用--prefix

npm run [command] --prefix path/to/your/other/folder

至于纱线:

yarn --cwd path/to/your/other/folder [command]

2
OP 正在尝试从 package.json 中运行,而不是从命令行中运行。 - Moe
7
@MohamedMoselhy,你完全可以把这些命令放在package.json的scripts部分中,没有任何阻止。 - Dominic

13

我最终使用了:

"scripts": {
   "job": "cd ./sub && \"$npm_execpath\" run subjob",
   ...
}

因为这也适用于 yarn


1
对我来说,这实际上是一个重大的改进。最高票答案给了我一些关于bcrypt库版本冲突的错误(我想是因为我使用NPM库从另一个文件夹运行命令而不是自己的)。通过使用此答案中所示的环境变量解决了这个问题。在我看来,你应该接受这个答案。 - machineghost
1
太好了!谢谢这个!我正在使用yarn,但是我不想将yarn命令硬编码到我的package.json中,现在完美运作。 - sylbru
很遗憾,这不再起作用了,因为 yarn 将参数“原样”转发,所以 npm run foo -- -baryarn run foo -- -bar 的含义不同。 - yellowsir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接