正确快速的部署一个TS Node.js
项目!
创建一个TS Node.js
应用
如果你已经熟悉创建TS
Node.js
项目,可以直接跳到“部署发布应用”部分。
初始化Node.js项目
在我们团队,我们非常喜欢TS,并且在我们的所有新项目中都会使用TS,因此创建一个TS项目并不新鲜。
让我们从最基本的开始:
1、初始化一个Node.js
项目
可以使用-y
参数可以快速跳过一步一步的配置,安装express
依赖,和用于TS
开发的express
的types
类型文件,安装typescript
作为开发依赖,操作如下:
mkdir myapp & cd myapp
npm init -y
npm install express @types/express --save
npm install typescript --save-dev
2、配置Typescript
创建一个typescript
默认配置文件tsconfig.json
npm tsc --init
tsconfig.json
文件中:
- declaration: 用于指定是否在编译完成后生成相应的
*.d.ts
文件,默认为false
- outDir: 定义
TS
编译后的目录,如果没有声明,默认编译后的文件位置将和ts
源文件在同一位置
修改以下配置:
"compilerOptions":{
…
"outDir": "./dist",
"declaration": true,
}
创建项目入口文件,创建文件app.ts
文件
import Express from 'express'
import cookieParser from 'cookie-parser';
import bodyParser from 'body-parser';
let app = Express();
let PORT = 3000;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.get('/',(req,res)=>{
res.send('hello world!');
});
app.set('port', process.env.PORT || 3000);
let server = app.listen(app.get('port'), function () {
debug('Express server listening…');
});
完成上述步骤后,我们的文件目录结构如下:
+node_modules
-package.json
-package-lock.json
-app.ts
-tsconfig.json
3、编译TS
我们下一步是构建和部署我们的TS Node.js
应用,由于在生产环境中,我们不运行TS版本,而是运行编译后的JS
。下面我们来编译项目。修改package.json
文件增加以下命令
"scripts": {
"tsc":"tsc",
"start": "node dist/app.js"
},
$ npm run tsc
将会根据我们tsconfig.json的配置编译我们的项目,并输出到指定目录
$ npm run start
将会运行我们编译后的JS文件.然后在本地进行测试,通过浏览器访问http://localhost:3000/
,访问成功,接下来我们部署和发布我们的应用
4、部署发布应用
这里我们主要采用两种方法将编译后的TS项目分发部署到各种环境中
- npm依赖包的形式
- docker容器方式4
NPM依赖包的形式
NPM生命周期钩子
一些特殊的生命周期钩子会在触发指定操作时被触发,这里我们将使用“prepare”钩子,该钩子会在执行npm publish命令发布到NPM之前被触发一次。所以我们可以这时编译的TS应用。
指定发布文件
通过 “files
”字段我们可以去定义发布NPM
包时应该包括哪些文件,如果省略该属性默认会为[“*”],会上传所有文件。
下面是修改后的部分package.json
…
"name": "myapp",
"version": "1.0.0",
"description": "",
"main": "dist/app.js",
"files": [
"dist",
"package.json",
"package-lock.json"
],
"scripts": {
"tsc":"tsc",
"prepare":"npm run tsc",
"start": "node dist/app.js"
},
…
在修改完package.json
配置后,我们运行npm publish
命令,将我们的应用发布到NPM
上去
$ npm publish
发布成功后,可以看到npmjs
上多了一个myapp
包
Docker容器方式
要将我们的TS Node.js
应用作为容器发布,我们要在项目根目录中创建docker
配置文件Dockerfile
。
下面我们一步步编写Dockerfile
文件:
- 拷贝编译后的文件到容器内
- 拷贝
package.json
和package-lock.json
到容器内
- 使用
npm install
安装依赖
- 使用
node build/app.js
运行我们的应用
Node版本
From node:16.15.1
ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV
copy ./dist /dist
copy ./package.json /package.json
copy ./package-lock.json /package-lock.json
RUN NODE_ENV=$NODE_ENV npm install
EXPOSE 3000
CMD ["node","dist/app.js"]
现在我们可以在根目录中构建docker
镜像,运行命令
$ docker build --tag myapp:test
接着我们运行容器,使用命令来运行我们的应用,查看程序是否成功运行在3000
端口
$ docker run -p 3000:3000 -it myapp:test
通过浏览器访问http://localhost:3000/
,测试