likes
comments
collection
share

Node应用开发部署指南这是一份简单的node项目开发部署指南,可以满足一些node服务的敏捷开发以及快速上线。通常我们

作者站长头像
站长
· 阅读数 26

开发

这是一份简单的node项目开发部署指南,可以满足一些node服务的敏捷开发以及快速上线

项目分类

通常我们可以将可部署的项目分为两类:

  1. node server
  2. node 定时任务

server类任务可以基于koaexpressnest等进行开发部署;

定时任务可以基于node-schedule等进行开发部署,比如定时发送邮件通知等。

你可以根据需要,选择对应的应用进行开发。

项目初始化

通过npm init初始化你的项目,配置好package.json

{
  "name": "node-demo",
  "version": "1.0.0",
  "description": "一个node模版项目",
  "license": "ISC"
}

项目目录结构

node-demo
├── dist
├── src
|  └── index.js
├── test
├── .gitignore
├── package-lock.json
├── package.json
└── README.md

其中:

  • dist:构建输出目录,用于部署
  • src:源码目录,存放源代码
  • test:测试目录,对源码进行单元测试
  • README.md:项目说明书,用于介绍项目的功能、如何调试等
  • .gitignore:git忽略文件

项目调试

nodemon

Nodemon 是一个用于开发 Node.js 应用程序的实用工具。它会监视你在 Node.js 应用程序中的文件变化,并在检测到变化时自动重启应用程序。这在开发过程中非常有用,因为你不必手动停止和重新启动服务器,nodemon 会在你保存文件后立即重新启动应用,从而加快开发速度。

安装
npm install nodemon -D
调试

npm script中添加nodemon调试指令:

"scripts": {
  "serve": "nodemon ./src/index.js"
}

src/index.js中添加测试代码:

console.log('hello world!')

启动项目:

npm run serve

Node应用开发部署指南这是一份简单的node项目开发部署指南,可以满足一些node服务的敏捷开发以及快速上线。通常我们

此时我们更改代码并保存就能在控制台实时输出

构建

我们可以选择rollup或者webpack对项目进行打包构建,二者皆可满足需求,也都能对代码进行tree shaking;

但我更倾向于使用rollup进行构建,因为他的配置非常简单,非常适合中小型node项目的构建;而对于构建复杂的大型应用程序,特别是单页应用(SPA),webpack则更为合适。

rollup

依赖安装
npm install rollup @rollup/plugin-json @rollup/plugin-node-resolve @rollup/plugin-commonjs -D
rollup.config.js

在项目根目录下添加rollup.config.js

const path = require('path')
// 将json 文件转换为ES6 模块
const json = require('@rollup/plugin-json')
// 在node_模块中查找并绑定第三方依赖项(将第三方依赖打进包里)
const resolve = require('@rollup/plugin-node-resolve')
// 将CommonJS模块转换为ES6
const commonjs = require('@rollup/plugin-commonjs')

const generateConfig = (input, output, plugins = []) => {
  return {
    input,
    output,
    plugins: [
      resolve(), //快速查找外部模块
      commonjs(), //将CommonJS转换为ES6模块
      json() //将json转换为ES6模块
    ]
  }
}

const configList = [
  generateConfig(path.resolve('./src/index.js'), [
    {
      file: './dist/index.js',
      format: 'cjs',
      sourcemap: false
    }
  ])
]
module.exports = configList
添加构建指令
"scripts": {
  "serve": "nodemon ./src/index.js",
  "build": "rollup -c"
}

然后执行npm run build即可在dist目录下生成index.js文件,我们可以运行以下命令对构建产物进行测试

node ./dist/index.js

webpack

依赖安装
npm install webpack@^4 webpack-cli@^4 webpack-node-externals -D
webpack.config.js

在项目根目录下添加webpack.config.js配置文件

const path = require('path')
const nodeExternals = require('webpack-node-externals')

module.exports = {
    target: 'node',  // 设置打包目标为 Node.js
    mode: 'production',
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'index.js',
    },
    externals: [nodeExternals()], // 排除 Node.js 内建模块和 npm 依赖
    optimization: {
      minimize: false
    },
    // stats: {
    //   warningsFilter: [/some warnings filter/] // 过滤掉某些警告
    // }
}
添加构建指令
"scripts": {
  "serve": "nodemon ./src/index.js",
  "build": "rollup -c",
  "build:webpack": "webpack"
}

然后执行npm run build:webpack即可在dist目录下生成index.js文件,我们可以运行以下命令对构建产物进行测试

node ./dist/index.js

部署

前提:你有一台可以使用的远程服务器

@weilinerl/deploy-helper

这个是我开发的一个简易代码构建部署工具,可以将本地代码进行:打包、上传、部署

仓库地址:deploy-helper

安装
npm install @weilinerl/deploy-helper -D
.deploy.config.js

在项目根目录下配置.deploy.config.js文件(也可以是json文件,即.deploy.config.json)

module.exports = {
  host: 'your server ip', // 替换成你的服务器ip地址
  port: 22,
  localPath: './dist',
  remotePath: '/node-demo', // 替换成你想在服务器存放的地址,需要你提前把这个目录建好
  shellScripts: 'node ./dist/index.js',
  readyTimeout: 20000
}

在配置里把host替换成你的服务器公网ip地址,并提前在服务器上建好应用放置目录,比如上面放到了服务器根目录下的node-demo目录中。

上面的shellScripts会在项目完成上传后自动执行,因此你的服务器还需具备对应的环境,比如上面的node ./lib/index.js需要基于node环境运行

添加部署指令
"scripts": {
  "serve": "nodemon ./src/index.js",
  "build": "rollup -c",
  "build:webpack": "webpack",
  "deploy": "npm run build && deploy-app"
}
部署

运行以下命令完成部署:(将服务器的用户名和密码通过命令行参数传递)

npm run deploy -- --username=${服务器用户名} --password=${服务器密码}

Node应用开发部署指南这是一份简单的node项目开发部署指南,可以满足一些node服务的敏捷开发以及快速上线。通常我们

pm2

M2 是一个用于 Node.js 应用程序的流行生产过程管理工具,它可以让你的应用程序保持永久运行,无需停机即可重新加载,并有效管理日志。以下是 PM2 的一些关键特性和常用命令:

关键特性:
  • 进程管理: 轻松启动、停止、重启和删除应用程序。
  • 负载均衡: PM2 可以管理多个 Node.js 应用实例,实现负载均衡。
  • 日志管理: 自动记录应用程序的输出日志,并提供查看、归档和清理功能。
  • 进程监控: 实时监控应用程序的运行状态,并自动重启出现故障的进程。
  • 集群模式: 可以让应用程序在多核 CPU 上运行多个实例,提高性能。

具体用法见:pm2

我们可以通过pm2来运行我们的node应用,从而实现负载均衡和自动重启,保证其可靠运行,因此我们需要经过两步:

  1. 在服务器上通过npm install pm2 -g安装pm2到全局
  2. 更改上面配置文件中的shellScripts为:
shellScripts: 'pm2 delete nodeDemoServer ; pm2 start --name nodeDemoServer ./lib/index.js',

重新执行上面的deploy命令,就会在控制台输出pm2启动的相关信息:

Node应用开发部署指南这是一份简单的node项目开发部署指南,可以满足一些node服务的敏捷开发以及快速上线。通常我们

我们也可以登陆服务器使用pm2 listpm2 log等查询pm2的运行状态与日志信息

可选

接入ts

monorepo

有时我们的项目需要使用monorepo来管理,以便同时部署多个功能隔离的服务,或者有workspace的概念;那么都2024年了,我在这儿是比较推荐使用pnpm workspace来实现此功能的。

pnpm-workspace.yaml

将node版本切换到16以上,在项目根目录添加pnpm-workspace.yaml配置文件:

packages:
  - 'packages/*'

删除package-lock.json,将目录更改为:

node-demo
├── README.md
├── dist
|  └── index.js
├── lib.zip
├── package.json
├── packages
|  ├── project-a
|  |  ├── package.json
|  |  ├── rollup.config.js
|  |  ├── src
|  |  |  └── index.js
|  |  └── webpack.config.js
|  └── shared
|     ├── package.json
|     └── src
|        └── index.js
├── pnpm-workspace.yaml
└── test

然后执行:

pnpm install

更改根目录的npm script为:

"scripts": {
  "serve": "pnpm -r --filter '!node-demo-shared' run serve",
  "build": "pnpm -r --filter '!node-demo-shared' run build",
  "build:webpack": "pnpm -r --filter '!node-demo-shared' run build:webpack",
  "deploy": "pnpm -r --filter '!node-demo-shared' run deploy"
}

其中node-demo-shared为shared目录下的package.jsonname,因为这部分代码作为公共方法等,提供给其他项目使用,因此不必参与构建或部署,由其他项目引入这部分代码进行构建部署。

然后对于packages下的各目录,按照单npm包的方式开发即可。

转载自:https://juejin.cn/post/7403151883135860763
评论
请登录