2016-10-14 109 views
5

我在使用Facebook的JavaScript包管理器yarn提供的run命令時遇到問題。在package.json腳本對象上運行「紗線運行」時出錯

當前在我的package.json文件中我有以下針對我的scripts對象。

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

當我運行以下命令時,它按預期工作,npm run lint。但是,當我使用從yarn運行腳本時,我收到以下錯誤。

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一樣運行命令。

回答

3

我發現了一個我認爲相關的問題:https://github.com/yarnpkg/yarn/pull/809

紗線不理解npm腳本中的空格。我想這將在下一個版本中修復。我可以在我的電腦上重現問題(使用最新的紗線:0.15.1)。

順便說一下,您不必在您的npm腳本中包含./node_modules/.bin。無論NPM和紗線會看該文件夾內默認情況下,如下解釋:https://docs.npmjs.com/cli/run-script

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

+0

我'eslint'試了一下,並沒有這樣的。該命令未找到。 這將與'npm run'一起使用,但不能與'yarn run'一起使用。 – Petesta

+0

字面上,有一天,大聲笑,這個包被稱爲'yarnpkg',並且剛剛被棄用於'紗線'。在此棄用之前'yarnpkg run command'按預期工作。現在使用新的軟件包不起作用。 – Petesta

+0

啊,我誤解了。只需等待發布。 – Petesta

相關問題