npm install --no-bin-links安装后react-app-rewired命令找不到问题排查
问题原因&解决方案
嘿,这个问题我之前在Vagrant+CentOS7的环境里踩过坑,给你捋捋到底咋回事以及怎么解决:
为啥会出现「react-app-rewired command not found」?
主要逃不开这几个原因:
- 本地包的可执行路径没被系统识别:你是用本地
npm install装的react-app-rewired,它的可执行文件藏在项目根目录的node_modules/.bin里,但终端默认不会把这个路径加到PATH环境变量里,直接敲命令系统自然找不到。 --no-bin-links搞的鬼:你加了这个参数后,npm会跳过创建node_modules/.bin里的软链接——毕竟Vagrant共享目录默认大多不支持软链接。这就导致哪怕包装好了,也没有能被系统调用的可执行入口。- 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共享目录支持软链接:
- 先停掉虚拟机:
vagrant halt - 打开Vagrantfile,在共享目录配置里加上软链接支持的参数,比如:
config.vm.synced_folder "./本地项目路径", "/vagrant", create: true, mount_options: ["dmode=777", "fmode=666", "uid=1000", "gid=1000", "symlink=true"]
- 重启并重新加载配置:
vagrant reload --provision - 删除现有的
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




