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

问题描述 投票:3回答:3

我正在生成使用NESTJS框架制作的API的生产版本,并想知道我应该将哪些文件上传到服务器。当我运行“npm run start:prod”编译它会生成“dist”文件夹,但我试图只运行它,但它不足以运行我的应用程序。我是否需要将所有文件上传到服务器?我做了几次测试,删除了我在开发过程中使用的文件夹,但只是在开发模式下完全相同时才设法在生产模式下运行。

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

谢谢

node.js typescript production nestjs
3个回答
3
投票

老实说,你应该只需要dist文件夹,就像JS'complied'文件一样。要运行您的应用程序,通常使用此命令node dist/main.js。至于你上传的文件,由你决定。我个人而言,我使用了大量的持续集成,所以我只是克隆到repo到我的容器/服务器并使用yarn start:prod。每次我部署时都是如此,我正在生成在生产环境中运行所需的文件。

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

git clone [email protected]:myuser/myrepo.git /var/www/
cd /var/www/
node -v && \
yarn && \
yarn build && \
yarn start:prod

上面的脚本应该

1)将所需的repo拉入“托管”目录 2)检查节点版本 3)安装node_modules并构建本机脚本等 4)建立生产分布 5)运行生产JS脚本

如果查看package.json文件,您会注意到使用yarn startyarn start:devyarn start:prod时运行的不同脚本。在dev中你会注意到使用ts-node这是一个打字稿节点的跑步者类型的东西(不记得正确的短语)。此外,start:dev脚本使用nodemode重新启动ts-node脚本。你还会看到start:prod脚本使用node dist/main.js并且prestart:prod脚本运行rm -rf dist && tsc,删除dist文件夹并“编译”生产环境所需的javascript。

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


1
投票

大多数情况下,您只需要node_modules中的依赖项。您应该在服务器上构建库,而不是从开发机器上复制它们。像bcrypt这样的库具有特定于机器的代码,可能不会在不同的机器上运行。 (30% of the npm libraries有本机绑定。)

因此,对于您的部署,我建议您在服务器上检查您的git存储库,然后直接在那里运行npm run start:prod(每次都构建项目)。


0
投票

我们不会在生产中构建我们的应用程序,而是在创建docker容器时构建它。

我们的步骤大致是:

  1. 运行npm install以及构建应用程序所需的任何工具。
  2. 创建docker容器并复制dist/node_modulespackage.json
  3. 在docker容器内运行npm rebuild bcrypt --update-binary
© www.soinside.com 2019 - 2024. All rights reserved.