正确快速的部署一个TS Node.js项目!
创建一个TS Node.js应用
如果你已经熟悉创建TS Node.js项目,可以直接跳到“部署发布应用”部分。
初始化Node.js项目
在我们团队,我们非常喜欢TS,并且在我们的所有新项目中都会使用TS,因此创建一个TS项目并不新鲜。
让我们从最基本的开始:
初始化一个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
配置Typescript
创建一个typescript默认配置文件tsconfig.json
npx 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
编译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/,访问成功,接下来我们部署和发布我们的应用
部署发布应用
这里我们主要采用两种方法将编译后的TS项目分发部署到各种环境中
- npm依赖包的形式
- docker容器方式
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/,测试
总结
以上就是手把手教你怎么正确快速的部署一个TS Node.js项目!