You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

npm install --no-bin-links安装后react-app-rewired命令找不到问题排查

问题原因&解决方案

嘿,这个问题我之前在Vagrant+CentOS7的环境里踩过坑,给你捋捋到底咋回事以及怎么解决:

为啥会出现「react-app-rewired command not found」?

主要逃不开这几个原因:

  1. 本地包的可执行路径没被系统识别:你是用本地npm install装的react-app-rewired,它的可执行文件藏在项目根目录的node_modules/.bin里,但终端默认不会把这个路径加到PATH环境变量里,直接敲命令系统自然找不到。
  2. --no-bin-links搞的鬼:你加了这个参数后,npm会跳过创建node_modules/.bin里的软链接——毕竟Vagrant共享目录默认大多不支持软链接。这就导致哪怕包装好了,也没有能被系统调用的可执行入口。
  3. scripts配置没到位:如果你的package.json里的build脚本写的是直接react-app-rewired build,没正确指向本地包的可执行文件,也会触发这个错误。

解决办法(按优先级排序)

方案1:直接在scripts里指定本地可执行文件路径

修改package.json的build脚本,直接写死node_modules/.bin下的react-app-rewired路径,比如:

{
  "scripts": {
    "build": "./node_modules/.bin/react-app-rewired build"
  }
}

改完后执行npm run build就行——npm在执行scripts时会临时把node_modules/.bin加入PATH,但如果--no-bin-links导致这个目录里没文件,就换方案2。

方案2:用npx调用本地包

npx会自动在项目的node_modules里找对应包的入口,哪怕没有软链接也能搞定。你可以直接在终端敲:

npx react-app-rewired build

或者把scripts改成这样:

{
  "scripts": {
    "build": "npx react-app-rewired build"
  }
}

这个方法对--no-bin-links的场景特别友好。

方案3:让Vagrant共享目录支持软链接(彻底解决根源)

如果上面两个方案都不满足你的需求,可以让Vagrant共享目录支持软链接:

  1. 先停掉虚拟机:vagrant halt
  2. 打开Vagrantfile,在共享目录配置里加上软链接支持的参数,比如:
config.vm.synced_folder "./本地项目路径", "/vagrant", 
  create: true, 
  mount_options: ["dmode=777", "fmode=666", "uid=1000", "gid=1000", "symlink=true"]
  1. 重启并重新加载配置:vagrant reload --provision
  2. 删除现有的node_modules,重新安装依赖(这次可以不用--no-bin-links了):
rm -rf node_modules
npm install

之后再执行npm run build就不会有问题了。

方案4:全局安装(应急用,不推荐)

虽然不建议全局装项目依赖(容易导致环境版本不一致),但如果只是临时救急,可以试试:

npm install -g react-app-rewired

装完后系统PATH里就有这个命令了,但一定要保证全局版本和项目package.json里指定的版本一致,不然可能出兼容性问题。

内容的提问来源于stack exchange,提问作者skcgc

火山引擎 最新活动