如何使用 NESTJS 生成 API 的生产版本

新手上路,请多包涵

我正在生成使用 NESTJS 框架制作的 API 的生产版本,并且想知道应该将哪些文件上传到服务器。当我运行“npm run start: prod”编译时,它会生成“dist”文件夹,但我尝试仅使用它运行,但这还不足以运行我的应用程序。我需要将所有文件上传到服务器吗?我做了几次测试,删除了我在开发过程中使用的文件夹,但只有在我在开发模式下都一样的情况下才能在生产模式下运行。

我在文档中查找了有关此的内容,但一无所获。有谁能够帮我?

谢谢

原文由 Marcos Lopes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 821
2 个回答

老实说,您应该只需要 dist 文件夹,因为那是 JS“编译”文件。要运行您的应用程序,通常您会使用此命令 node dist/main.js 。至于你上传什么文件,这取决于你。就我个人而言,我使用了很多持续集成,所以我只是克隆到我的容器/服务器中并使用 yarn start:prod 。因此,每次部署时,我都会生成在生产环境中运行所需的文件。

就像@Kim Kern 提到的那样,一些节点模块是使用节点陀螺仪本地构建的;所以最好在部署时在服务器/容器上构建你的 node_modules。您的部署脚本应如下所示

git clone git@github.com:myuser/myrepo.git /var/www/
cd /var/www/
node -v && \
yarn && \
yarn build && \
yarn start:prod

上面的脚本应该

  1. 将所需的 repo 拉入“托管”目录

2)检查节点版本

  1. 安装 node_modules 并构建原生脚本等

  2. 构建生产分布

5)运行生产JS脚本

如果您查看 package.json 文件,您会注意到使用 yarn startyarn start:devyarn start:prod 时运行的不同脚本。在开发时,您会注意到 ts-node 的使用,这是一个打字稿节点运行器类型的东西(不记得正确的短语)。此外 start:dev 脚本使用节点模式重新启动 ts-node 脚本。 You’ll also see the start:prod script uses node dist/main.js and that the prestart:prod script runs rm -rf dist && tsc which removes the dist folder and ‘compiles’生产环境所需的 javascript。

但是,没有持续集成的服务器上的 typescript 应用程序的缺点是可能会出现 typescript 编译错误,在运行 prod 脚本之前您不会看到或知道这些错误。我建议在进行部署之前设置一个程序来从 typescript 编译 javascipt,因为您不想在知道下一个版本将构建和运行之前删除当前的 dist 构建!

原文由 bashleigh 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说,这种方法很有效,你只需要 dist 文件夹即可:

  • 使用 npm run start:prod 创建应用程序的产品构建,这将在应用程序源中创建一个 dist 文件夹
  • dist 文件夹复制到您的服务器。
  • 要获取服务器上的所有 node_modules 依赖项,只需将 package.json 文件复制到 dist 文件夹中,然后运行到服务器 npm install 从那里开始。
  • 如果您正在使用 pm2 运行您的节点应用程序,只需运行 pm2 start main.jsdist 文件夹中

原文由 Sandeep K Nair 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题