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

谢谢

4

1 回答 1

1

任何由 执行的已定义 npm 脚本都npm run将从 with 中查找可执行的二进制文件

cd your_project
./node_modules/.bin

先文件夹。您还可以通过以下方式查看其完整路径:

npm bin

这些二进制文件来自您的项目定义的依赖项,来自package.jsonvia npm install

npm run start因此等同于运行:

./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 有点麻烦,因为您要么定义要在 npm 脚本中使用的所有依赖库,要么必须运行每个命令,例如:

$(npm bin)/yourCmd

由于我也喜欢yarn用作 npm 替代品,因此我越来越喜欢它的默认设置,即始终查看项目的 bin 文件夹,以便通过以下方式执行 cmd:

yarn yourCmd
$ "/home/philipp/my-project/node_modules/.bin/yourCmd"
于 2017-08-13T13:53:51.480 回答