首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在npm脚本中不从参数中提取文件名

问在npm脚本中不从参数中提取文件名
EN

Stack Overflow用户
提问于 2018-03-13 15:50:15
回答 1查看 294关注 0票数 1

我为eslint编写了一个npm脚本,它从文件名files.txt中读取输入文件的全局模式(到eslint),并在一个循环中使用这些输入一个接一个地调用eslint:

代码语言:javascript
复制
"eslint": "while IFS= read -r line; do echo $line; node ./node_modules/eslint/bin/eslint.js $line; done < files.txt"

files.txt看起来像:

代码语言:javascript
复制
"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,这就是我在终端机上得到的:

代码语言:javascript
复制
"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",那么它就会正常运行,并在stdout上打印出衬里警告和错误。

我无法理解为什么eslint没有从脚本中运行,尽管给了它输入文件glob模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-13 19:39:43

解决方案:

在file.txt中省略双引号可以解决通过bash运行时的问题。

file.txt的内容应该改为如下:

代码语言:javascript
复制
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模式的文件将被线列,并且任何线性警告/错误都将被打印到stdout中。

进一步解释:

当您通过终端运行命令;./node_modules/eslint/bin/eslint.js "config/**/*.js"时,它是成功的,因为在eslint执行时,双引号实际上已被删除。

但是,当双引号存在于file.txt中时,它们将被保留,因此没有文件被链接。

跨平台:

你可能已经知道了..。在npm-脚本中使用的bash语法是不可传输的。也就是说,它只能通过bash shell成功运行,而不是跨平台运行。

为了确保跨平台支持,我建议只使用eslint的标准CLI/选项 (如per@ralphtheninja评论)。

但是,尽管如此,如果您必须从单独的files.txt中读取全局模式(跨平台支持是一项要求),那么也许编写一个节点实用程序脚本来处理该逻辑是一种更好的方法。然后,可以通过npm-script调用封装该逻辑的节点脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49260448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档