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

时间:2019-04-13 11:03:42

标签: node.js npm npm-scripts working-directory

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

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

我需要能够以foo NPM脚本的身份调用super

super / package.json

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

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

  

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

或者我需要能够以cd sub && ../node_modules/.bin/foo-binary NPM脚本的身份调用foo

super / sub / package.json

super

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

"scripts": { "foo": "../node_modules/.bin/foo-binary" } 不能以sub作为其依存关系有多个原因,其中一个原因是,所有子项目应始终使用相同的foo版本,并且不占用空间。多份foo副本。

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

1 个答案:

答案 0 :(得分:1)

用JSON转义双引号(即\"...\")将npm-script中定义的路径括起来。

例如:

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

现在,它将成功跨平台运行-通过Windows cmd.exe和* nix sh