2017-08-13 94 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"