Yarn 脚本产生的输出与直接运行命令不同

Posted

技术标签:

【中文标题】Yarn 脚本产生的输出与直接运行命令不同【英文标题】:Yarn script produces different output than running command directly 【发布时间】:2020-02-07 11:31:40 【问题描述】:

我在package.json 中定义了一个脚本:

"scripts": 
  "prettierCheck": "./node_modules/.bin/prettier --check ./app/javascript/**/*.js"

如果我使用yarn run prettierCheck 运行此脚本,Prettier 不会发现我的文件有任何格式问题。但是,如果我直接运行 Prettier 命令,它会发现违规文件。

yarn run prettierCheck 的输出:

~/Projects/tome $ yarn run prettierCheck
yarn run v1.19.0
$ ./node_modules/.bin/prettier --check ./app/javascript/**/*.js
Checking formatting...
All matched files use Prettier code style!
Done in 0.20s

./node_modules/.bin/prettier --check ./app/javascript/**/*.js的输出:

~/Projects/tome $ ./node_modules/.bin/prettier --check ./app/javascript/**/*.js
Checking formatting...
... several files listed here ...
Code style issues found in the above file(s). Forgot to run Prettier?

为什么会这样?直接运行命令与通过 Yarn 脚本运行有什么区别?

【问题讨论】:

你用什么命令直接检查? @AnshuKumar 和prettierCheck脚本一模一样,只是在提示符下直接执行。 你能把两次执行的输出都包括进来吗?纱线是否有可能认为它正在从不同的目录执行,因此找不到传入的文件?如果您从命令中删除 ./node_modules/.bin/ 前缀(这是多余的),会有什么变化吗? @Soc 是否删除前缀没有区别。用两次运行的输出更新了我的问题。 【参考方案1】:

我遇到了同样的问题,或者至少我认为我遇到了同样的问题。我尝试了一些方法,例如在我的命令中为文件/目录/glob 添加引号,更改我的路径/glob 并开始为我工作,因为现在我可以看到一些有用的输出。试试这些,也许它也适合你们。

这就是prettier CLI documentation 对路径和文件/目录/globs 的看法。

不要忘记全局的引号!引号确保 更漂亮的 CLI 扩展 glob 而不是你的 shell,这是 对跨平台使用很重要。

所以在你的脚本中尝试这样的事情(注意: -c 是 --check 的缩写)

scripts": 
"pretty-check": "prettier -c 'src/**/*.ts'",

注意'src/**/*.ts' 周围的引号 我不确定这是否适用于所有人,但我希望它对我有用。

如果您想知道 什么是文件/目录/glob 基本上就是您为文件定义正则表达式的部分,例如 'src/**/*.ts' 部分在命令prettier -c 'src/**/*.ts'

【讨论】:

以上是关于Yarn 脚本产生的输出与直接运行命令不同的主要内容,如果未能解决你的问题,请参考以下文章

纱线运行 someScript 输出“找不到命令:导出”

screen工具(虚拟终端)nohup命令(让脚本后台运行)

Yarn 无法执行 source 命令

纱线工作区为每个运行 shell 命令

PySpark shell 命令不产生任何输出

用putty或secureCRT通过SSH到linux后,直接关闭putty(securCRT)与通过输出exit命令退出,两者有何不同?