使用CLI package.json脚本时生产部署失败

时间:2019-04-20 11:18:44

标签: javascript node.js typescript npm nestjs

我已经通过CLI工具(v6.3.0)创建了一个基本应用程序,并且已经准备好推送到生产服务器并遇到了问题。

我正在使用Shipit进行部署(这可能无关紧要),并且此过程的一部分是安装npm依赖项(带有标志--production)。

一切都顺利进行,直到我的部署运行最终命令npm run start:prod(以在节点进程上启动Nest应用程序)为止。该程序执行以下步骤:

  1. 删除dist目录rimraf dist && npm run build的内容;
  2. 尝试重建dist目录tsc -p tsconfig.build.json的内容;
  3. 运行node dist/main.js;

所有这一切的问题是,我相信提供TypeScript命令的tsc软件包是devDependency而不是在npm install期间使用--production标志安装的依赖项。

这是一个错误,还是我完全错过了npm run start:prod命令的要点。我很欣赏在全球范围内安装TypeScript软件包可以解决此问题,尽管我不确定这是否是意图或假设?

如果将NestJS部署到生产环境中,您是否正在使用其他策略?

1 个答案:

答案 0 :(得分:0)

在服务器端应用程序中,dependenciesdevDependencies之间的区别并不那么重要,因为您没有交付依赖项,因此应用程序的大小并不那么重要。

但是,当您部署到云中时,您可能想要节省空间。编译应用程序后,无需TypeScript即可运行您的应用程序。当您只想重新启动应用程序时,无需重新编译应用程序。因此,您可以做些什么:

删除prestart:prod脚本。

部署例程:

  1. 使用npm install
  2. 安装所有依赖项
  3. 运行npm run build
  4. 使用npm prune --production修剪您的开发依赖项
  5. 运行npm run start:prod

这几乎是我部署到heroku时发生的情况。

或者,您当然可以在typescript下声明dependencies,而不是devDependencies