为运行二进制文件的NPM脚本设置CWD

问题描述 投票:1回答:1

我有一个托管子项目并包含公共依赖项的超级项目:

super
  node_modules
    .bin
      foo-binary
      foo-binary.exe
    foo
  sub
    node_modules
    package.json
  package.json

我需要能够将foo称为super NPM脚本:

超/的package.json

"scripts": {
  "foo": "foo-binary" <-- should run with super/sub/ as CWD
}

在这种情况下,foo-binarysuper/作为CWD运行,而它应该与super/sub/一起运行。使用cd会导致跨平台问题;带有反斜杠的cd sub && ..\\node_modules\\.bin\\foo-binary适用于Windows但不适用于* nix操作系统,而带有正斜杠的cd sub && ../node_modules/.bin/foo-binary在Windows上失败(在Windows 7上测试):

“..”不被识别为内部或外部命令,可操作程序或批处理文件

或者我需要能够将foo称为super NPM脚本:

超/子/的package.json

"scripts": {
  "foo": "../node_modules/.bin/foo-binary"
}

在这种情况下,特定于平台的路径也会在Windows上失败。

有几个原因导致sub不能将foo作为自己的依赖,其中一个原因是所有子项目应该始终使用相同的foo版本而不占用多个foo副本的空间。

在这种情况下,如何设置当前工作目录,跨平台,最好不要在项目中添加自定义脚本?

node.js npm npm-scripts working-directory
1个回答
1
投票

使用JSON转义双引号(即\"...\")封闭npm脚本中定义的路径。

例如:

"scripts": {
  "foo": "cd sub && \"../node_modules/.bin/foo-binary\""
}

现在,这将通过windows cmd.exe和* nix sh成功跨平台运行。

© www.soinside.com 2019 - 2024. All rights reserved.