无法在package.json中的脚本对象上运行“yarn run”

时间:2016-10-14 18:07:01

标签: javascript yarnpkg

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

目前在我的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一样运行命令。

1 个答案:

答案 0 :(得分:3)

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

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

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

因此,您的脚本只能是:"lint": "eslint --ignore-pattern dist ."