用重定向到的内容替换 npm start

replace npm start by what it redirects to

我正在测试代码,在 .json 文件中有:

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

当我 运行

时代码运行良好
npm start

在控制台中。

但是npm start应该是一条捷径。如果我写:

react-scripts start

而不是在控制台中它不起作用。我的错误信息是

react-scripts: command not found 

为什么?不是等价的吗?如果没有找到反应脚本,使用 npm start 是如何工作的?

谢谢

任何由 npm run 执行的定义的 npm 脚本将从

中寻找可执行的二进制文件
cd your_project
./node_modules/.bin

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

npm bin

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

npm run start 因此等同于 运行ning:

./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 脚本持续重建状态时,它还可以防止 "works on my machine" 与同事发生问题。

使用 npm 有点麻烦,因为您要么定义要在 npm 脚本中使用的所有依赖库,要么必须 运行 每个命令,例如:

$(npm bin)/yourCmd

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

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