eslint 没有从 npm 脚本中的参数中获取文件名
eslint not taking filename from argument in an npm script
我已经为 eslint 编写了一个 npm 脚本,它从文件名中读取输入文件的 glob 模式(到 eslint)files.txt 并在循环中用这些输入一个一个地调用 eslint:
"eslint": "while IFS= read -r line; do echo $line; node ./node_modules/eslint/bin/eslint.js $line; done < files.txt"
files.txt
看起来像:
"server.js"
"config/**/*.js"
"modules/*/server/**/*.js"
"modules/core/client/app/config.js"
"modules/core/client/app/init.js"
"modules/*/client/*.js"
"modules/*/client/**/*.js"
当我 运行 : npm run eslint
这是我在终端上得到的:
"server.js"
"config/**/*.js"
"modules/*/server/**/*.js"
"modules/core/client/app/config.js"
"modules/core/client/app/init.js"
"modules/*/client/*.js"
"modules/*/client/**/*.js"
而如果我在终端上 运行 ./node_modules/eslint/bin/eslint.js "config/**/*.js"
,那么它会 运行 正确并在标准输出上打印出 linting 警告和错误。
尽管为脚本提供了输入文件 glob 模式,但我无法理解为什么 eslint 没有从脚本中 运行ning。
解法:
省略 file.txt
中的双引号解决了 运行ning 通过 bash shell.
时的问题
file.txt
的内容应该改为:
server.js
config/**/*.js
modules/*/server/**/*.js
modules/core/client/app/config.js
modules/core/client/app/init.js
modules/*/client/*.js
modules/*/client/**/*.js
现在当你运行; npm run eslint
,匹配每个 glob 模式的文件将被检查,任何检查 warnings/errors 将被打印到 stdout
.
进一步说明:
当你运行命令时; ./node_modules/eslint/bin/eslint.js "config/**/*.js"
通过终端它是成功的,因为在 eslint
执行时双引号实际上被删除了。
但是,当 file.txt
中存在双引号时,它们会被保留,因此没有文件被检查。
跨平台:
您可能已经知道...您在 npm-script 中使用的 bash 语法不可移植。 IE。它只会通过 bash shell 而不是跨平台 运行 成功。
为了确保 cross-platform 支持,我建议只使用 eslint 的 标准 CLI/options (根据@ralphtheninja 评论).
然而,话虽这么说,如果您必须从单独的 files.txt
(并且需要 cross-platform 支持) 读取 globbing 模式,那么也许编写节点实用程序脚本来处理该逻辑是一种更好的方法。然后可以通过 npm-script
.
调用封装该逻辑的节点脚本
我已经为 eslint 编写了一个 npm 脚本,它从文件名中读取输入文件的 glob 模式(到 eslint)files.txt 并在循环中用这些输入一个一个地调用 eslint:
"eslint": "while IFS= read -r line; do echo $line; node ./node_modules/eslint/bin/eslint.js $line; done < files.txt"
files.txt
看起来像:
"server.js"
"config/**/*.js"
"modules/*/server/**/*.js"
"modules/core/client/app/config.js"
"modules/core/client/app/init.js"
"modules/*/client/*.js"
"modules/*/client/**/*.js"
当我 运行 : npm run eslint
这是我在终端上得到的:
"server.js"
"config/**/*.js"
"modules/*/server/**/*.js"
"modules/core/client/app/config.js"
"modules/core/client/app/init.js"
"modules/*/client/*.js"
"modules/*/client/**/*.js"
而如果我在终端上 运行 ./node_modules/eslint/bin/eslint.js "config/**/*.js"
,那么它会 运行 正确并在标准输出上打印出 linting 警告和错误。
尽管为脚本提供了输入文件 glob 模式,但我无法理解为什么 eslint 没有从脚本中 运行ning。
解法:
省略 file.txt
中的双引号解决了 运行ning 通过 bash shell.
file.txt
的内容应该改为:
server.js
config/**/*.js
modules/*/server/**/*.js
modules/core/client/app/config.js
modules/core/client/app/init.js
modules/*/client/*.js
modules/*/client/**/*.js
现在当你运行; npm run eslint
,匹配每个 glob 模式的文件将被检查,任何检查 warnings/errors 将被打印到 stdout
.
进一步说明:
当你运行命令时; ./node_modules/eslint/bin/eslint.js "config/**/*.js"
通过终端它是成功的,因为在 eslint
执行时双引号实际上被删除了。
但是,当 file.txt
中存在双引号时,它们会被保留,因此没有文件被检查。
跨平台:
您可能已经知道...您在 npm-script 中使用的 bash 语法不可移植。 IE。它只会通过 bash shell 而不是跨平台 运行 成功。
为了确保 cross-platform 支持,我建议只使用 eslint 的 标准 CLI/options (根据@ralphtheninja 评论).
然而,话虽这么说,如果您必须从单独的 files.txt
(并且需要 cross-platform 支持) 读取 globbing 模式,那么也许编写节点实用程序脚本来处理该逻辑是一种更好的方法。然后可以通过 npm-script
.