node.js - eslint 不从 npm 脚本中的参数中获取文件名

标签 node.js eslint npm-scripts

我为 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/

相关文章:

javascript - Export 语句中的 ESLint 解析错误

node.js - npm 错误!安装 next.js 时

javascript - 使用请求 promise 在 nodejs 中链接 promise

node.js - 调用 facebook-messenger webhook 时如何修复 bot-connector 上的 HTTP-Status 401(未经授权)?

node.js - 未满足的 WebPack 对等依赖问题

javascript - Eslint 正在从终端工作,但在编辑器 UI (VSCode) 中未显示错误

javascript - "The specified module could not be found"使用 node-gyp 构建 Canvas 时

npm - 如何通过 npm 命令使用commander.js 命令

javascript - 如何在 npm 脚本 glob 模式中使用否定?

npm - NPM:ENOENT:没有此类文件或目录,请重命名