包含括号语法错误的NPM脚本

时间:2017-12-18 14:42:52

标签: node.js bash npm

我的package.json中有以下NPM脚本:

{
  "scripts": {
     "lint": "tslint -c tslint.json src/**/**?(.test).ts?(x)"
  }
}

运行npm run lint后,我收到以下错误:

> tslint -c tslint.json src/**/**?(.test).ts?(x)

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `tslint -c tslint.json src/**/**?(.test).ts?(x)'

似乎我无法在我的NPM脚本中使用)字符。我怎么能解决这个问题?脚本是一个有效的bash脚本。

我试着搜索这个问题,但我找不到任何有用的东西。

感谢任何帮助。

非常感谢!

更新

似乎在我的终端(macOS)中运行此命令是这样的:

bash -c "tslint -c tslint.json src/**/**?(.test).ts?(x)"

我得到完全相同的错误。

但是如果我像这样运行它:

bash -c "tslint -c tslint.json src/**/**?\(.test\).ts?\(x\)"
它似乎在终端上工作。但不是在NPM脚本中。

让它像这样工作:

{
   "scripts": {
      "lint": "bash -c \"tslint -c tslint.json 'src/**/**?(.test).ts?(x)'\"",
   }
}

或更简单的版本

{
   "scripts": {
      "lint": "tslint -c tslint.json 'src/**/**?(.test).ts?(x)'",
    }
}

积分转到@shellter。

1 个答案:

答案 0 :(得分:3)

我曾写过这个脚本,对我的javascript文件进行基本语法检查:

#!/usr/bin/env bash
if [ -x "$(command -v parallel)" ]; then
    find src/js -name "*.js" | parallel --no-notice --jobs 4 --gnu nodejs -c
else
    find src/js -name "*.js" | xargs -L1 -d '\n' nodejs -c
fi

这将lint src / js中的每个javascript文件并使用并行(如果可用)。如果您的cpu包含更多线程,则可能需要增加jobs参数以匹配thread-count。

我希望这对你有所帮助