如何捆绑一个nodejs服务器应用程序并为分发做准备?

时间:2019-07-09 21:56:36

标签: javascript node.js deployment server

首先,我不希望将应用程序打包为单个可执行文件。

我很想知道采用什么方法在当前项目中创建应用程序副本,该副本已准备好移至启用服务器的位置。

现在我的服务器应用程序是一个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结构完全不同的自定义项目树结构。

1 个答案:

答案 0 :(得分:0)

我不确定为什么package.json的“开发”内容有问题,所以也许我没有解决您的问题的症结所在。但是,对于我们的环境,我们使用ansible部署所有节点应用程序(主要是微服务)。部署程序包只是一个tarball(可以是zip文件)。 ansible软件包包括config.js文件和pm2 startup.json文件的模板,这些模板都是根据目标环境(阶段/测试与生产)定制的。

如果您对此方法感兴趣,请告诉我。