天天看點

幾分鐘内部署一個TS Node.js應用

作為全棧開發者,建立項目是很有趣的,可以設計架構,頭腦風暴,開發,但在開發結束之後呢,我們就要部署或釋出應用。那麼如何正确快速的部署一個TS Node.js項目呢,今天我們來搞定它。

建立一個TS Node.js應用

如果你已經熟悉建立TS Node.js項目,可以直接跳到“部署釋出應用”部分

初始化Node.js項目:

在我們團隊,我們非常喜歡TS,并且在我們的所有新項目中都會使用TS,是以建立一個TS項目并不新鮮。

讓我們從最基本的開始:

  1. npm init

    初始化一個Node.js項目,使用

    -y

    參數可以快速跳過一步一步的配置
  2. npm install express @types/express

    安裝express依賴,和用于TS開發的express的types類型檔案
  3. npm install typescript --save-dev

    安裝typescript作為開發依賴
mkdir my-app && cd my-app
npm init -y
npm install express @types/express --save
npm install typescript --save-dev
           

TS配置

  • npx tsc --init

    将建立一個typescript預設配置檔案tsconfig.json
  • declaration

    用于指定是否在編譯完成後生成相應的*.d.ts檔案,預設為false
  • outdir

    定義TS編譯後的目錄,如果沒有聲明,預設編譯後的檔案位置将和ts源檔案在同一位置

運作指令

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檔案增加以下指令

  1. npm run tsc

    将會根據我們tsconfig.json的配置編譯我們的項目,并輸出到指定目錄
  2. npm run start:prod

    将會運作我們編譯後的JS檔案
"scripts": {
  "tsc": "tsc",
  "start:prod": "node dist/server.js"
}
           

然後在本地進行測試

npm run tsc
npm run start:prod

# 服務啟動成功,運作端口:3000
           

通過浏覽器通路http://localhost:3000/,通路成功,接下來我們部署和釋出我們的應用

幾分鐘内部署一個TS Node.js應用

部署釋出應用

這裡我們主要采用兩種方法将編譯後的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
           

輸出

幾分鐘内部署一個TS Node.js應用

釋出成功後,可以看到npmjs上多了一個

my-app-xiaoshuai

幾分鐘内部署一個TS Node.js應用

Docker容器方式

要将我們的TS Node.js應用作為容器釋出,我們要在項目根目錄中建立docker配置檔案Dockerfile。

下面我們一步步編寫Dockerfile檔案

  1. 拷貝編譯後的檔案到容器内
  2. 拷貝package.json和package-lock.json到容器内
  3. 使用

    npm install

    安裝依賴
  4. 使用

    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 .

指令

成功後輸出如下

幾分鐘内部署一個TS Node.js應用

接着我們運作容器,使用

docker run -p 3000:3000 -it my-app:test

指令來運作我們的應用,可以看到程式成功運作在3000端口

docker run -p 3000:3000 -it my-app:test
# 服務啟動成功,運作端口:3000
           

通過浏覽器通路http://localhost:3000/,通路成功

幾分鐘内部署一個TS Node.js應用

源碼

https://github.com/cmdfas/ts-node-express-deploy

總結

今天我們介紹了建立TS Node.js項目和部署它的基礎知識,希望對大家有所幫助,能夠用在現在或未來的項目中。

如果本文有幫助,微信搜尋【小帥的程式設計筆記】,讓我們每天進步

繼續閱讀