作為全棧開發者,建立項目是很有趣的,可以設計架構,頭腦風暴,開發,但在開發結束之後呢,我們就要部署或釋出應用。那麼如何正确快速的部署一個TS Node.js項目呢,今天我們來搞定它。
建立一個TS Node.js應用
如果你已經熟悉建立TS Node.js項目,可以直接跳到“部署釋出應用”部分
初始化Node.js項目:
在我們團隊,我們非常喜歡TS,并且在我們的所有新項目中都會使用TS,是以建立一個TS項目并不新鮮。
讓我們從最基本的開始:
-
初始化一個Node.js項目,使用npm init
參數可以快速跳過一步一步的配置-y
-
安裝express依賴,和用于TS開發的express的types類型檔案npm install express @types/express
-
安裝typescript作為開發依賴npm install typescript --save-dev
mkdir my-app && cd my-app
npm init -y
npm install express @types/express --save
npm install typescript --save-dev
TS配置
-
将建立一個typescript預設配置檔案tsconfig.jsonnpx tsc --init
-
用于指定是否在編譯完成後生成相應的*.d.ts檔案,預設為falsedeclaration
-
定義TS編譯後的目錄,如果沒有聲明,預設編譯後的檔案位置将和ts源檔案在同一位置outdir
運作指令
npx tsc --init
修改以下配置
"compilerOptions": {
...
"outDir": "dist", // 編譯後輸出目錄
"declaration": true // 生成 d.ts
}
建立項目入口檔案
建立
server.ts
檔案
import express from 'express'
const app = express()
const PORT = 3000
app.use(express.json())
app.get('/', (req, res) => {
res.send(‘Hello World!’)
})
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`)
})
完成上述步驟後,我們的檔案目錄結構如下
.
├── node_modules
├── package-lock.json
├── package.json
├── server.ts
└── tsconfig.json
編譯TS
我們下一步是建構和部署我們的TS Node.js應用,由于在生産環境中,我們不運作TS版本,而是運作編譯後的JS。下面我們來編譯項目
修改package.json檔案增加以下指令
-
将會根據我們tsconfig.json的配置編譯我們的項目,并輸出到指定目錄npm run tsc
-
将會運作我們編譯後的JS檔案npm run start:prod
"scripts": {
"tsc": "tsc",
"start:prod": "node dist/server.js"
}
然後在本地進行測試
npm run tsc
npm run start:prod
# 服務啟動成功,運作端口:3000
通過浏覽器通路http://localhost:3000/,通路成功,接下來我們部署和釋出我們的應用
部署釋出應用
這裡我們主要采用兩種方法将編譯後的TS項目分發部署到各種環境中
- npm依賴包的形式
- docker容器方式
NPM依賴包的形式
NPM生命周期鈎子
一些特殊的生命周期鈎子會在觸發指定操作時被觸發,這裡我們将使用“prepare”鈎子,該狗子會在執行npm publish指令釋出到NPM之前被觸發一次。是以我們可以這時編譯的TS應用。
指定釋出檔案
通過 “files”字段我們可以去定義釋出NPM包時應該包括哪些檔案,如果省略該屬性預設會為["*"],會上傳所有檔案。
下面是修改後的package.json
"name": "my-app-xiaoshuai", // 我們釋出到NPM上的名字
"main": "dist/server.js", // 修改入口檔案位址
"types": "dist/server.d.ts", // 指定TS類型檔案
"files": [
"dist",
"package.json",
"package-lock.json",
"README.md"
],
"scripts": {
"tsc": "tsc",
"prepare": "npm run tsc" // 編輯typescript
}
npm publish
在修改完package.json配置後,我們運作npm publish指令,将我們的應用釋出到NPM上去
npm publish
輸出
釋出成功後,可以看到npmjs上多了一個
my-app-xiaoshuai
包
Docker容器方式
要将我們的TS Node.js應用作為容器釋出,我們要在項目根目錄中建立docker配置檔案Dockerfile。
下面我們一步步編寫Dockerfile檔案
- 拷貝編譯後的檔案到容器内
- 拷貝package.json和package-lock.json到容器内
- 使用
安裝依賴npm install
- 使用
運作我們的應用node build/server.js
# Node 版本
FROM node:14.18.0-alpine
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/server.js"]
現在我們可以在根目錄中建構docker鏡像,運作
docker build --tag my-app:test .
指令
成功後輸出如下
接着我們運作容器,使用
docker run -p 3000:3000 -it my-app:test
指令來運作我們的應用,可以看到程式成功運作在3000端口
docker run -p 3000:3000 -it my-app:test
# 服務啟動成功,運作端口:3000
通過浏覽器通路http://localhost:3000/,通路成功
源碼
https://github.com/cmdfas/ts-node-express-deploy
總結
今天我們介紹了建立TS Node.js項目和部署它的基礎知識,希望對大家有所幫助,能夠用在現在或未來的項目中。
如果本文有幫助,微信搜尋【小帥的程式設計筆記】,讓我們每天進步