Node.js NodeJS应用程序部署-NPM/Gulp

Node.js NodeJS应用程序部署-NPM/Gulp,node.js,bash,amazon-web-services,gulp,aws-code-deploy,Node.js,Bash,Amazon Web Services,Gulp,Aws Code Deploy,我正试图在AWS CodeDeploy上部署nodeJS应用程序,但在gulp依赖项和从bash文件运行npm安装/启动方面存在问题 我有一个标准的应用程序文件夹结构,在项目根目录中有package.json等 Bash文件(bin/npm\u install.sh) NPM脚本定义 "scripts": { "postinstall": "gulp minify-sdk && gulp setup-auto", "start": "gulp", "test": "g

我正试图在AWS CodeDeploy上部署nodeJS应用程序,但在gulp依赖项和从bash文件运行npm安装/启动方面存在问题

我有一个标准的应用程序文件夹结构,在项目根目录中有package.json等

Bash文件(bin/npm\u install.sh)

NPM脚本定义

"scripts": {
  "postinstall": "gulp minify-sdk && gulp setup-auto",
  "start": "gulp",
  "test": "gulp test"
}
运行bin/npm_install.sh时出错

cd /opt/deployments/app-backend
npm install
[stdout]
[stdout]> app@0.0.1 start /opt/deployments/app-backend
[stdout]> gulp
[stdout]
[stderr]
[stderr]module.js:340
[stderr]    throw err;
[stderr]          ^
[stderr]Error: Cannot find module 'pretty-hrtime'
[stderr]    at Function.Module._resolveFilename (module.js:338:15)
[stderr]    at Function.Module._load (module.js:280:25)
[stderr]    at Module.require (module.js:364:17)
[stderr]    at require (module.js:380:17)
[stderr]    at Object.<anonymous> (/opt/deployments/app-backend/node_modules/.bin/gulp:5:18)
[stderr]    at Module._compile (module.js:456:26)
[stderr]    at Object.Module._extensions..js (module.js:474:10)
[stderr]    at Module.load (module.js:356:32)
[stderr]    at Function.Module._load (module.js:312:12)
[stderr]    at Function.Module.runMain (module.js:497:10)
[stderr]npm ERR! weird error 8
[stderr]npm WARN This failure might be due to the use of legacy binary "node"
[stderr]npm WARN For further explanations, please read
[stderr]/usr/share/doc/nodejs/README.Debian
[stderr] 
[stderr]npm ERR! not ok code 0
[stdout]
[stdout]>app@0.0.1启动/选择/部署/应用程序后端
[stdout]>大口喝
[stdout]
[stderr]
[stderr]module.js:340
[标准]投掷错误;
[stderr]^
[stderr]错误:找不到模块'pretty hrtime'
[stderr]位于Function.Module.\u解析文件名(Module.js:338:15)
[stderr]at Function.Module.\u load(Module.js:280:25)
[stderr]at Module.require(Module.js:364:17)
[stderr]在需要时(模块js:380:17)
[stderr]at对象。(/opt/deployments/app backend/node_modules/.bin/gulp:5:18)
[stderr]at Module._compile(Module.js:456:26)
[stderr]at Object.Module._extensions..js(Module.js:474:10)
[stderr]at Module.load(Module.js:356:32)
[stderr]at Function.Module.\u load(Module.js:312:12)
[stderr]位于Function.Module.runMain(Module.js:497:10)
[stderr]npm错误!奇怪的错误8
[stderr]npm警告此故障可能是由于使用了旧的二进制“节点”
[stderr]npm警告如需进一步解释,请阅读
[stderr]/usr/share/doc/nodejs/README.Debian
[stderr]
[stderr]npm错误!不正常代码0
注意:从项目根文件夹运行npm安装可以正常工作


有什么建议吗?这是在codedeploy完成代码部署后启动应用程序的最佳方式吗?

您可以使用“AfterInstall”生命周期事件来安装模块,并使用“ApplicationStart”生命周期事件来启动应用程序。手动运行npm_install.sh是否成功?

虽然我还没有找到对此的解释,但问题是当从TravisCI/CodeShip返回node_modules文件夹时,node_modules/.bin/*文件没有符号链接,因此这些模块无法解析其内部依赖关系


我最终通过在after_install钩子中运行npm install gulp来解决这个问题,该钩子重新创建了符号链接。

请参阅我的答案以了解发生的情况。