部署Node.js-React应用到Azure时如何解决Cannot find module '../lib/cli'错误?
解决Azure部署Node.js-React应用时的nodemon模块找不到问题
问题根源
- 脚本死循环:你的
package.json里start脚本写的是"npm start",这会无限递归调用,导致实际执行的nodemon路径出现异常。 - 生产环境误用nodemon:nodemon是开发环境的热重载工具,生产环境用它不仅没必要,还可能引发依赖路径问题。
- 本地node_modules上传导致兼容性问题:本地环境(大概率是Windows)的node_modules和Azure的Linux服务器不兼容,直接上传会导致依赖文件损坏或路径错误。
修复步骤
1. 修正package.json的启动脚本
把scripts改成开发和生产环境分离的写法,避免死循环:
"scripts": { "hotloader": "webpack-dev-server --config ./webpack.config.js --mode development --port 5000", "start": "nodemon server/server.js", // 开发环境用nodemon "prod": "NODE_ENV=production node server/server.js" // 生产环境直接用node启动 }
2. 让Azure用生产环境脚本启动
选下面任意一种方式即可:
- 直接修改start脚本(推荐):把
start改成生产命令,Azure默认会执行npm start:"start": "NODE_ENV=production node server/server.js" - Azure门户配置启动命令:登录Azure找到你的Web App → 配置 → 常规设置 → 启动命令,输入
npm run prod。
3. 优化GitHub Actions部署流程
不要上传本地的node_modules,只传必要文件,避免兼容性问题:
修改工作流里的上传artifact步骤:
- name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: node-app path: | server/ package.json package-lock.json dist/ # webpack打包后的产物目录,根据实际情况调整 # 其他你需要的静态文件或配置
如果Azure没有自动安装依赖,就在部署步骤后加一句:
- name: Install production dependencies run: npm install --production
4. 清理后重新部署
删除本地的node_modules和package-lock.json,重新跑npm install,然后推代码触发GitHub Actions重新部署。
验证
部署完成后看Azure日志,应该会看到服务用node server/server.js启动,不会再出现nodemon找不到模块的错误。
内容的提问来源于stack exchange,提问作者LizMel
相关产品推荐
相关产品推荐

