我在使用Facebook的JavaScript程序包管理器run
提供的yarn
命令时遇到了问题。
目前在我的package.json
文件中,我的scripts
对象有以下内容。
"scripts": {
"lint": "./node_modules/.bin/eslint --ignore-pattern dist ."
}
当我运行以下命令时,它按预期工作npm run lint
。但是,当我使用yarn
从yarn 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
上,我注意到如果您有date
或pwd
这样的可执行文件,那么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
一样运行命令。
答案 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 ."