我正在使用NESTJS框架生成API的生产版本,并想知道应上传哪些文件到服务器。当我运行“npm run start: prod”编译时,它会生成“dist”文件夹,但我尝试只使用它运行,但这不足以运行我的应用程序。我需要上传所有文件到服务器吗?我尝试删除开发过程中使用的文件夹进行多次测试,但只有在开发模式下全部相同的情况下才能以生产模式运行。
我查看了文档,但没有找到相关内容。有人可以帮帮我吗?
谢谢。
我正在使用NESTJS框架生成API的生产版本,并想知道应上传哪些文件到服务器。当我运行“npm run start: prod”编译时,它会生成“dist”文件夹,但我尝试只使用它运行,但这不足以运行我的应用程序。我需要上传所有文件到服务器吗?我尝试删除开发过程中使用的文件夹进行多次测试,但只有在开发模式下全部相同的情况下才能以生产模式运行。
我查看了文档,但没有找到相关内容。有人可以帮帮我吗?
谢谢。
说实话,你只需要使用dist文件夹,因为那里是JS编译后的文件。通常情况下,运行应用程序会使用这个命令 node dist/main.js
。至于上传哪些文件,取决于你自己。我个人经常使用持续集成,所以我只需将存储库克隆到我的容器/服务器上,并使用yarn start:prod
。这样每次部署时都会生成在生产环境下运行所需的文件。
像@Kim Kern提到的那样,一些Node模块是使用node-gyro本地构建的;因此,在部署时最好在服务器/容器上构建你的node_modules。你的部署脚本应该类似于这样
git clone git@github.com:myuser/myrepo.git /var/www/
cd /var/www/
node -v && \
yarn && \
yarn build && \
yarn start:prod
以上脚本应该:这种方法对我有用,你只需使用dist
文件夹即可实现:
npm run start:prod
创建应用程序的生产版本,这将在应用程序源中创建dist
文件夹dist
文件夹复制到您的服务器上。node_modules
依赖项,只需将package.json
文件复制到您已复制到服务器的dist
文件夹中,然后从那里运行npm install
。pm2
运行您的node应用程序,只需在dist
文件夹内运行pm2 start main.js
package.json
来安装你的node_modules,以便你可以使用你的dist
文件运行应用程序。希望这可以帮助到你。 - Sandeep K Nairpm2
+ dist
是干净的 - undefined只需使用Nest-CLI并构建
nest build
之后你会得到一个包含编译好代码的dist文件夹。你可以将其放在服务器上,并使用PM2进程管理器运行:
production=true pm2 start dist/main.js
async function bootstrap() {
let appConfig = {}
if (process.env.production) {
console.log('process env production: ', process.env.production)
const httpsOptions = {
key: fs.readFileSync('/etc/certs/letsencrypt/live/testtest.de/privkey.pem'),
cert: fs.readFileSync('/etc/certs/letsencrypt/live/testtest.de/fullchain.pem'),
}
// prod config
appConfig = {
httpsOptions,
}
}
const app = await NestFactory.create<NestExpressApplication>(
AppModule,
appConfig,
)
app.enableCors()
app.setGlobalPrefix('v1')
await app.listen(3300)
}
bootstrap()
node_modules
中的依赖项。但是,您应该在服务器上构建库,而不是从开发机器复制它们。像bcrypt
这样的库具有特定于机器的代码,可能无法在其他机器上运行。(npm库的30%具有本地绑定。)npm run start:prod
(每次都会构建项目)。transpileOnly: true
。然后应用程序可以在几秒钟内构建,但没有类型检查。最好的选择可能是在部署之前构建JavaScript,但在服务器上运行npm/yarn安装? - Mick我们在使用NX作为我们API存储的单库,并且我们使用docker来制作我们的镜像和容器。当我们需要创建docker镜像时,只需运行:npx nx build <project>
,这将在dist/apps/<project>
上生成构建。此文件夹将与package.json一起放入docker镜像中即可。你不需要添加node_modules,因为它们已经在package.json中了。只需确保在Dockerfile中包含npm install
。
npm install
的注意事项是,除非您固定版本,否则它不会安装与 package.json
中定义的完全相同的版本。最好运行 npm ci --production
并将 node_modules 复制到镜像中 - 这将保证一致的版本。在您有 "lib": "^1.0.0"
的地方运行 npm install
将升级 "lib"
到 v1.0.1
,我曾经遇到过 mongoose 在补丁版本上引入破坏性更改的情况。 - Ash
transpileOnly: true
。这样,应用程序将在几秒钟内构建,但是没有进行类型检查。 - Mick