首先,我不希望将应用程序打包为单个可执行文件。
我很想知道采用什么方法在当前项目中创建应用程序副本,该副本已准备好移至启用服务器的位置。
现在我的服务器应用程序是一个git repo,其中包含所有常用文件以及源文件夹:
./src/server/index.js
我们是否只是将./src/server
文件夹中的所有内容复制到./dist/
,然后也将package.json
复制到./dist
?
然后,我们将./dist
文件夹的内容复制到一个能够为应用程序提供服务的位置,例如/www/app2/
,并且在该位置,我们确保拥有NODE_ENV=production
在环境中并运行npm install
来消除生产依赖关系?
但是,然后,我们的package.json
文件将仍然具有与开发相关的脚本以及生产中不需要的其他内容?
部署NodeJs应用程序的最佳实践是什么?
---更新---
这是我到目前为止的原型,并且可以正常工作:
"scripts": {
"clean:dist": "./node_modules/.bin/rimraf dist",
"prep:dist": "./node_modules/.bin/mkdirp ./dist",
"copy:server": "./node_modules/.bin/ycopy ./src/server/ ./dist/ -r '^((?!tests$).)*$' -i",
"copy:package": "./node_modules/.bin/copyfiles package-production.json ./dist/",
"build": "npm run clean:dist && npm run prep:dist && npm run copy:server",
"start:dev": "nodemon src/server/index.js",
"start:server": "node dist/server/index.js",
"prompt": "echo 'No prompt functionality available'",
"greet": "echo 'Welcome to my project.'"
},
因此,想法是有选择地将dev/src
文件夹中的位移动到生产就绪的dist
文件夹中。拥有一个简单的package.json文件的想法是,我们将不再需要dev
依赖项,我们也将不再需要大多数dev scripts
依赖项。因此,大概像以下内容就足够了:
"scripts": {
"setup:server": "NODE_ENV='production' && npm install"
"start:server": "pm2 start index.js"
}
...或者我们可能希望在csh/bash
中包含一些./dist/bin
脚本,以简化启动过程。
"scripts": {
"start:server": "./bin/launcher"
}
我肯定可以看到./dist
文件夹中存在并且与./src
结构完全不同的自定义项目树结构。
答案 0 :(得分:0)
我不确定为什么package.json的“开发”内容有问题,所以也许我没有解决您的问题的症结所在。但是,对于我们的环境,我们使用ansible部署所有节点应用程序(主要是微服务)。部署程序包只是一个tarball(可以是zip文件)。 ansible软件包包括config.js文件和pm2 startup.json文件的模板,这些模板都是根据目标环境(阶段/测试与生产)定制的。
如果您对此方法感兴趣,请告诉我。