2017-08-13 80 views
0

我測試代碼,並在以.json文件替換故宮開始有:通過它重定向到

"scripts": { 
    "start": "react-scripts start", 
    "build": "react-scripts build" 
} 

的代碼工作得很好,當我在控制檯中運行

npm start 

但是npm start應該是一條捷徑。如果我寫:

react-scripts start 

而不是在控制檯它不工作。我的錯誤訊息是

react-scripts: command not found 

爲什麼?它不等同?如果react-scripts沒有找到,那麼使用npm start是如何工作的?

謝謝

回答

1

通過npm run exexcuted任何定義NPM腳本將尋找executionable二進制文件從

cd your_project 
./node_modules/.bin 

文件夾第一。您還可以看到其完整路徑通過:

npm bin 

這些二進制文件從項目的確定依賴通過npm install來從package.json

npm run start因此被euquivalent到運行:

./node_modules/.bin/react-scripts start 

當您嘗試運行

react-scripts start 
自身

,你終端只會看你的系統的PATH,並設法找到它。

echo $PATH 

所以如果你只react-scripts本地和沒有安裝全球範圍內,它將找不到可執行二進制文件,因此失敗。

如果你想在全球範圍內運行它,你必須在全球範圍內安裝:

npm install -g react-scripts 
which react-scripts 
~/.nvm/versions/node/v7.10.0/bin/react-scripts // 

~/.nvm/versions/node/v7.10.0/bin是我的路徑的一部分。


圖片的標題說明:

我喜歡有每個項目定義自己的依賴其具體版本本地和僅使用。因爲您可能有多個項目依賴於不同版本的二進制文件。

而且,如果您始終如一地使用package.json中定義的那個,則不會遇到問題。

當您的npm腳本始終重建狀態時,它還可以防止「同事在我的機器上工作」問題。

隨着新公共管理這是一個有點亂,你要麼定義所有的依賴庫要在故宮腳本中使用,或者您必須運行像每個命令:

$(npm bin)/yourCmd 

因爲我也很喜歡使用yarn爲我的npm替代品,我越來越喜歡它的默認設置,以便始終查看項目的bin文件夾以執行cmd通過:

yarn yourCmd 
$ "/home/philipp/my-project/node_modules/.bin/yourCmd"