【问题标题】:Production deployment failing when using CLI package.json scripts使用 CLI package.json 脚本时生产部署失败
【发布时间】:2019-09-10 09:10:42
【问题描述】:

我已经通过 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;

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

这是一个错误,还是我完全错过了npm run start:prod 命令的要点。我很欣赏全局安装 TypeScript 包可能会解决问题,尽管我不确定这是意图还是假设?

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

【问题讨论】:

  • 感谢 Kim,我不确定它是否完全回答了我的问题,但我将其标记为正确,因为它已经走了很长一段路(我怀疑此时是否会有更多答案)。

标签: javascript node.js typescript npm nestjs


【解决方案1】:

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

但是,当您部署到云时,您可能希望节省空间。编译后不需要 TypeScript 来运行您的应用程序。当您只想重新启动应用程序时,您不需要重新编译应用程序。所以,你可以做什么:

删除prestart:prod 脚本。

部署例程:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多