VSCode搭建node + typescript開發環境


我們一起來喜歡TypeScript

現在寫js不用TypeScript,倫家可能會覺得你是外星人。
是的,TypeScript很大程度增強了代碼的可讀性,可跟蹤性,可維護性和減少了bug。
那么沒有理由不適用TypeScript進行js開發,但是回歸本質,要根據實際出發,不是盲目的一來直接上TS。


我參與過一些使用TS開發的項目,也發現使用TS出現的問題。
舉點例子:

  1. 無處不見的any
  2. 無視TS
    高版本的express已經內置TS, 實際上到處還是any。
app.get("/", function(req:  any, res: any) {
    res.send("Hello,"  +  data.name);
});
  1. 本身一個函數能寫完的代碼,卻寫一個class來完成
  2. tslint編譯一堆錯誤,依舊無視
    這條倒是其次, 因為很多時候,也許你沒有那么多時間去處理這些問題。也說明我們在工程化下的功夫不足。

node和typescript

node + typescript 入門級別的配置真的特別簡單。

  1. npm安裝typescript
  2. 配置tsconfig.json
  3. 配置package.json的scripts命令

簡單三步,你就可以通過簡單的一步npm run xxx,TS文件們就乖乖的變為了js文件。
然后執行node dist/xx.js就能啟動你的服務了。
但是,這不是我們所期望的。
我們希望我修改ts文件后,自動編譯為js文件,然后啟動服務。


我了解的相對較好的有下面三種方式:

ts-node-dev

這個方案是無意中看到的,star並不是特別多,400左右。
ts-node-dev 是基於 ts-node 的。
ts-node 可以直接執行ts文件,是不是很酷。
一句代碼就可以監聽文件變化,並運行編譯后的代碼。

ts-node-dev --respawn app.ts

我為什么要將Typescript與Express、nodejs一起使用(譯文)

TypeScript-Node-Starter

微軟這也有一個參考。也有對tslint的支持。
基本思路就是package.json 的scripts。
其主要使用的是 concurrently 和# nodemon
package.json的scripts如下:

  "scripts": {
    "start": "npm run serve",
    "build": "npm run build-sass && npm run build-ts && npm run tslint && npm run copy-static-assets",
    "serve": "node dist/server.js",
    "watch-node": "nodemon dist/server.js",
    "watch": "concurrently -k -p \"[{name}]\" -n \"Sass,TypeScript,Node\" -c \"yellow.bold,cyan.bold,green.bold\" \"npm run watch-sass\" \"npm run watch-ts\" \"npm run watch-node\"",
    "test": "jest --forceExit --coverage --verbose",
    "watch-test": "npm run test -- --watchAll",
    "build-ts": "tsc",
    "watch-ts": "tsc -w",
    "build-sass": "node-sass src/public/css/main.scss dist/public/css/main.css",
    "watch-sass": "node-sass -w src/public/css/main.scss dist/public/css/main.css",
    "tslint": "tslint -c tslint.json -p tsconfig.json",
    "copy-static-assets": "ts-node copyStaticAssets.ts",
    "debug": "npm run build && npm run watch-debug",
    "serve-debug": "nodemon --inspect dist/server.js",
    "watch-debug": "concurrently -k -p \"[{name}]\" -n \"Sass,TypeScript,Node\" -c \"yellow.bold,cyan.bold,green.bold\" \"npm run watch-sass\" \"npm run watch-ts\" \"npm run serve-debug\""
  }

TypeScript with Node.js里面提供了更加簡單的方法。 nodemon + ts-node

 "scripts": {
    "start": "npm run build:live",
    "build": "tsc -p .",
    "build:live": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
  },

TypeScript-Node-Starter的package.json可以好好看看,具有很好的擴展性。

3. gulp-typescript + gulp-nodemon

gulp-typescript負責編譯ts
gulp-nodemon負責啟動服務
主要任務就是copy, compile和watch

const gulp = require("gulp");
const ts = require("gulp-typescript");
const nodemon = require('gulp-nodemon')
const del = require('del');
const sourcemaps = require('gulp-sourcemaps');


const tsProject = ts.createProject("tsconfig.json", { noImplicitAny: true });

// 默認任務
gulp.task("default", ["copy", "compile", "watch"], function () {
    console.log('started .....')
})

// 復制配置文件
gulp.task('copy', function () {
    return gulp.src("./src/config/**/*.json")
        .pipe(gulp.dest("./dist/config"))     
})

// 編譯
gulp.task("compile", function () {
    return gulp.src("./src/**/*.ts")
        .pipe(sourcemaps.init({ loadMaps: true }))
        .pipe(tsProject())
        .js
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest("dist"));
})

gulp.task('build',['compile','copy'])


// 刪除
gulp.task('del', function (cb) {
    return del([
        'dist/**',
    ], cb);
});

// 監聽變化
gulp.task('watch', ['compile'], function (done) {
    var stream = nodemon({
        script: 'dist/app.js',
        watch: 'src/**',
        tasks: ['copy', 'compile'],
        done: done,
        ext: 'ts html json'
    })
    return stream
})

使用typescript開發node js
TypeScript with Node.js


ESLint

到這里,我們已經又進了一步。
VSCode本身有插件TSLint插件,而且有新舊版。
ESLint插件默認是 可以讀取tslint.json的配置的,如果沒有,他有自己的默認配置。
新版的,如果有錯誤,默認是警告,而不是錯誤提示。
你去首選項勾選掉:tslint.alwaysShowRuleFailuresAsWarnings即可。


我們是需要添加eslint.json配置的

  1. 方便自定義
  2. eslint編譯檢查,比如你的同事是用txt文件編寫的呢。

因此,我們還需要安裝tslint包。
還需要在package.json的文件里面添加一個腳本

"tslint": "tslint -c tslint.json -p tsconfig.json",

Prettier

代碼美化。很多編輯器都有類似功能, VSCode也不例外。
VSCode的Prettier內置了prettier-eslintprettier-tslint插件。
你可以在配置里面json文件修改或者配置面板修改。

"prettier.eslintIntegration": false,

這樣一來,Prettier使用的就是tslint的配置。
在這里以后, windows換將下,默認情況,你就可以Ctl + Shift + F 自動格式化代碼了。而且是按照你的tslint配置來格式化的, 就問你怕不怕。

總結

我們最后來看一下package.json下scripts的配置

"scripts": {
"build": "npm run tslint && npm run build-ts",
"build-ts": "tsc",
"watch-ts": "tsc -w",
"watch-node": "nodemon dist/app.js",
"tslint": "tslint -c tslint.json -p tsconfig.json",
"dev": "concurrently \\"npm:watch-ts\\"  \\"npm run watch-node\\""
}
  • build: 最終的構建
  • build-ts: 僅僅是build TS文件
  • watch-ts: 文件變化時,就build
  • watch-node: build后的文件變化后,就重啟服務
  • tslint: TS語法檢查
  • dev: 開發模式下,修改ts文件后,自動build為js文件,並啟動服務。

這樣一來,感覺輕松多了。
想想就沒好,自動美化代碼,編寫后自動啟動服務。
喝點茶,出去走走。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM