package.json 中的脚本对象出现问题 运行 "yarn run"

Trouble running "yarn run" on scripts object in package.json

我在使用 yarn 提供的 run 命令时遇到问题,Facebook 的包管理器 JavaScript。

目前在我的 package.json 文件中,我的 scripts 对象有以下内容。

"scripts": {
  "lint": "./node_modules/.bin/eslint --ignore-pattern dist ."
}

当我 运行 以下命令时,它按预期工作,npm run lint。但是,当我 运行 来自 yarnyarn run lint 的脚本时,我收到以下错误。

Petesta :: λ -> ~/Git/yarn yarn run lint
yarn run v0.15.1
$ "./node_modules/.bin/eslint --ignore-pattern dist ."
sh: ./node_modules/.bin/eslint --ignore-pattern dist .: No such file or directory
error Command failed with exit code 127.
info Visit http://yarnpkg.com/en/docs/cli/run for documentation about this command.

./node_modules/.bin 目录在我的 $PATH 上,我确实注意到如果你有像 datepwd 这样的可执行文件,那么 yarn run some_script_on_date 就可以了不出所料。

实现此功能的一种方法是创建一个单独的 shell 文件,其中包含您要执行的命令。我们称它为 ./scripts/lint.sh.

#!/bin/bash

./node_modules/.bin/eslint --ignore-pattern dist .

然后 运行 在文件 chmod +x ./scripts/lint.sh

上执行此命令

现在在您的 scripts 对象中添加以下行。

"new_lint": "./scripts/lint.sh"

现在 yarn run new_lint 将 运行 符合预期。

我是不是遗漏了什么,或者这就是 yarn 中调用脚本的方式?我想 运行 命令就像 npm.

我发现了一个我认为相关的问题:https://github.com/yarnpkg/yarn/pull/809

yarn 不理解 npm 脚本中的空格。我想这将在下一个版本中修复。我可以在我的电脑上重现这个问题(使用最新的纱线:0.15.1)。

顺便说一下,您不必在 npm 脚本中包含 ./node_modules/.bin。默认情况下,npm 和 yarn 都会查看该文件夹,如下所述:https://docs.npmjs.com/cli/run-script

所以你的脚本只能是:"lint": "eslint --ignore-pattern dist ."