React+Node项目postinstall执行npm install报错code 1
Node+React项目postinstall脚本循环执行导致npm命令报错
问题描述
在集成React的Node项目中配置了postinstall脚本,内容为执行npm install --prefix client,但执行npm install时出现大量错误:命令被循环执行多次,最终提示“‘npm’ 未被识别为内部或外部命令,也不是可运行的程序或批处理文件”,同时伴随多个依赖包已废弃的警告,报错代码为1。
错误日志
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility npm WARN deprecated rollup-plugin-terser@7.0.2: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin. npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x. npm ERR! code 1 npm ERR! path C:\Users\davie\OneDrive\Área de Trabalho\Dev\node\videos npm ERR! command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c npm install --prefix client npm ERR! npm ERR! code 1 npm ERR! npm ERR! path C:\Users\davie\OneDrive\Área de Trabalho\Dev\node\videos npm ERR! npm ERR! command failed npm ERR! npm ERR! command C:\Windows\system32\cmd.exe /d /s /c npm install --prefix client ...(循环执行多次后) npm ERR! npm ERR! npm ERR! npm ERR! npm ERR! 'npm' não é reconhecido como um comando interno npm ERR! npm ERR! npm ERR! npm ERR! npm ERR! ou externo, um programa operável ou um arquivo em lotes. ... npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\davie\AppData\Local\npm-cache\_logs\2022-12-18T03_28_52_710Z-debug-0.log
当前package.json脚本配置
"scripts": { "start:client": "npm start --prefix client", "start:node": "nodemon index.js", "start:dev": "concurrently \" npm run start:node\" \"npm run start:client\"", "postinstall": "npm install --prefix client" }
解决方法
1. 终止postinstall循环触发
问题根源是postinstall会在所有npm install操作完成后执行,包括client目录下的npm install,导致循环触发,最终耗尽系统资源或导致环境变量异常,出现npm命令无法识别的错误。
解决方式:
- 方案一:添加存在性判断(Windows环境)
修改postinstall脚本,仅当client目录下没有node_modules时才执行安装:"postinstall": "if not exist client\\node_modules npm install --prefix client" - 方案二:改用前置启动脚本
把client的安装逻辑从postinstall移到prestart,仅在启动项目前执行,避免自动循环:"prestart:dev": "npm install --prefix client", "start:client": "npm start --prefix client", "start:node": "nodemon index.js", "start:dev": "concurrently \" npm run start:node\" \"npm run start:client\"" - 方案三:使用跨平台条件判断
安装cross-env和shelljs编写跨平台脚本,确保只在根目录执行时触发client安装。
2. 修复npm环境变量问题
循环执行可能导致环境变量临时异常,检查并确保npm的安装路径(通常是C:\Users\<你的用户名>\AppData\Roaming\npm)已添加到系统环境变量PATH中,之后重启终端或IDE生效。
3. 处理依赖废弃警告(可选)
升级client项目中的依赖包,替换已废弃的包:
- 将
rollup-plugin-terser替换为@rollup/plugin-terser - 将
sourcemap-codec替换为@jridgewell/sourcemap-codec - 升级
svgo到v2.x版本
内容的提问来源于stack exchange,提问作者Davi Marcilio
相关产品推荐
相关产品推荐

