我为 eslint 编写了一个 npm 脚本,它从文件名 files.txt 读取输入文件的 glob 模式(到 eslint),并在循环中用这些输入一一调用 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 警告和错误。
我无法理解为什么 eslint 没有从脚本运行,尽管给了它输入文件 glob 模式。
最佳答案
解决方案:
省略 file.txt
中的双引号可以解决通过 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 模式的文件将被 linting,并且任何 linting 警告/错误将被打印到 stdout
。
进一步说明:
当您运行命令时; ./node_modules/eslint/bin/eslint.js "config/**/*.js"
通过终端成功,因为在 eslint
执行时双引号实际上已被删除。
但是,当 file.txt
中存在双引号时,它们会被保留,因此没有文件被检查。
跨平台:
您可能已经知道...您在 npm-script 中使用的 bash 语法不可运输。 IE。它只能通过 bash shell 成功运行,不能跨平台运行。
为了确保跨平台支持,我建议仅使用 eslint 的标准 CLI/options (根据 @ralphtheninja 评论)。
但是,话虽这么说,如果您必须从单独的 files.txt
读取通配模式(并且需要跨平台支持),那么编写 Node 实用程序脚本来处理该逻辑可能是更好的方法。然后可以通过您的 npm-script
调用封装该逻辑的 Node 脚本。
关于node.js - eslint 不从 npm 脚本中的参数中获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49260448/