成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用gulp和vsc構(gòu)建高效的typescript開發(fā)環(huán)境

JerryZou / 1679人閱讀

摘要:出于某些原因,近期開始需要在公司推廣使用寫服務(wù)端,因?yàn)橹笆褂瞄_發(fā)過多個(gè)個(gè)人項(xiàng)目,所以知道新手開發(fā)非常容易將代碼寫的散亂并且不易后人理解。所以折中的選擇了開發(fā),也就用起了。

出于某些原因,近期開始需要在公司推廣使用nodejs寫服務(wù)端,因?yàn)橹笆褂胑s6開發(fā)過多個(gè)個(gè)人項(xiàng)目,所以知道新手開發(fā)node非常容易將代碼寫的散亂并且不易后人理解。本人剛?cè)胄械臅r(shí)候做的是java,覺得強(qiáng)類型的語言更加適合組織代碼和團(tuán)隊(duì)合作,而且強(qiáng)類型語言因?yàn)轭愋蛷?qiáng)制聲明,所以IDE可以做到很好的代碼感知能力,因?yàn)橛蠭DE的撐腰,所以開發(fā)大型系統(tǒng),復(fù)雜系統(tǒng)比較有保障。所以折中的選擇了typescript開發(fā),也就用起了vsc(visual studio code)。
無論什么語言什么項(xiàng)目,總得搭建起一個(gè)足夠高效可以讓自己開心的寫代碼的開發(fā)環(huán)境(還是叫開發(fā)流程?不知道怎么描述了,詞窮),以下是我對(duì)typescript開發(fā)流程的最低要求:

typescript代碼在我保存文件時(shí)自動(dòng)編譯

編譯完成之后自動(dòng)重啟服務(wù)

可以直接在typescript代碼上打斷點(diǎn)調(diào)試

最終效果:

大家也看到了用的就是gulp+vsc內(nèi)置的debug工具(使用attach模式),用到的gulp插件列表:

gulp-nodemon

gulp-sourcemaps

gulp-typescript

先附上我的目錄結(jié)構(gòu):

使用gulp任務(wù)編譯ts文件

最最基礎(chǔ)的肯定是編譯ts文件了,這里用到的就是gulp-typescriptgulp-sourcemaps(用于生成映射),詳細(xì)的使用方法和可配置項(xiàng)可以直接點(diǎn)上面的鏈接進(jìn)去看,這里我們需要根據(jù)tsconfig.json里的配置進(jìn)行編譯,tsconfig.json都差不多的,我這里貼下我的。

{
    "compilerOptions": {
        "target": "ES5",
        "module": "commonjs",
        "sourceMap": true,
        "outDir": "dist",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": false
    },
    "includes": [
        "src/**/*"
    ]
}

需要注意的地方就是為了調(diào)試ts代碼的時(shí)候映射到編譯后的文件上,sourceMap必須要開啟,outDir也必須要指向正確的目錄。
然后就開始編寫gulp任務(wù)了,也是比較簡(jiǎn)單的,就需要注意下這些流的順序

var gulp = require("gulp");
var ts = require("gulp-typescript");
var sourcemaps = require("gulp-sourcemaps");

var tsProject = ts.createProject("tsconfig.json");

gulp.task("compile", function () {
    return tsProject.src()

        // 注意順序
        .pipe(sourcemaps.init())
        .pipe(tsProject())
        .pipe(sourcemaps.write())
        .pipe(gulp.dest("dist"));
});

這樣我們?cè)诿钚羞\(yùn)行gulp compile的時(shí)候,就會(huì)生成js文件了,打開js文件,在文件最下方也會(huì)有用于sourcemap的url,如果需要生成.map文件的話需要傳遞一個(gè)相對(duì)路徑給.write方法:

var gulp = require("gulp");
var plugin1 = require("gulp-plugin1");
var plugin2 = require("gulp-plugin2");
var sourcemaps = require("gulp-sourcemaps");

gulp.task("javascript", function() {
  gulp.src("src/**/*.js")
    .pipe(sourcemaps.init())
      .pipe(plugin1())
      .pipe(plugin2())
    .pipe(sourcemaps.write("../maps"))
    .pipe(gulp.dest("dist"));
});
監(jiān)聽文件變更自動(dòng)編譯并重啟服務(wù)

要實(shí)現(xiàn)這個(gè)功能就要使用到gulp-nodemon這個(gè)插件了,詳細(xì)的使用方法也直接點(diǎn)上面鏈接看就行了,這個(gè)東西踩過幾個(gè)坑需大家注意一下下面注釋的內(nèi)容。這個(gè)也就是最后的gulpfile

var gulp = require("gulp");
var ts = require("gulp-typescript");
var sourcemaps = require("gulp-sourcemaps");
var nodemon = require("gulp-nodemon");

var tsProject = ts.createProject("tsconfig.json");

gulp.task("compile", function () {
    return tsProject.src()
        .pipe(sourcemaps.init())
        .pipe(tsProject())
        .pipe(sourcemaps.write())
        .pipe(gulp.dest("dist"));
});

gulp.task("watch", ["compile"], function () {
    return nodemon({
        script: "dist/bin/www.js",  // 服務(wù)的啟動(dòng)文件
        watch: "src",    // 源代碼目錄
        tasks: ["compile"], // 在重啟服務(wù)前需要執(zhí)行的任務(wù)
        ext: "ts", // 監(jiān)聽.ts結(jié)尾的文件 必須
        // 設(shè)置環(huán)境
        env: {
            "NODE_ENV": "development"
        },
        // 必須開啟debug模式
        exec: "node --debug"
    });
});

當(dāng)然啦,你也可以使用vsc里面task的功能,把他集成到vsc里面去,參考這個(gè)去做就行了,因?yàn)槲矣玫氖莔ac,直接把終端拖到另一個(gè)屏幕去了,要看輸出內(nèi)容的時(shí)候直接劃一下就行,所以沒有使用這個(gè)功能。

使用vsc進(jìn)行代碼調(diào)試

這里使用的是attach模式進(jìn)行調(diào)試,也就是由nodemon --debug來啟動(dòng)服務(wù),并提供出一個(gè)debug的端口,然后我們用vsc接入進(jìn)行調(diào)試。
點(diǎn)擊進(jìn)入debug菜單

然后點(diǎn)擊

生成debug的配置文件(launch.json),這里提供下我配置好的,使用的時(shí)候注意把那些注釋刪掉。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach",
            "type": "node", // 必須為node,不能為node2
            "request": "attach",
            "port": 5858, // 為node debug模式的端口號(hào),默認(rèn)為5858
            "address": "localhost",
            "restart": true, // 配合nodemon使用
            "sourceMaps": true, // 開啟了sourcemap
            "outDir": "${workspaceRoot}/dist", // 輸出目錄
            "outFiles": [],
            "localRoot": "${workspaceRoot}",
            "remoteRoot": null
        }
    ]
}

然后點(diǎn)擊

就可以了,注意要先運(yùn)行gulp watch命令。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91102.html

相關(guān)文章

  • 【全文】狼叔:如何正確學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    Edison 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    fengxiuping 評(píng)論0 收藏0
  • 類型系統(tǒng)-前端進(jìn)化里程碑

    摘要:這些優(yōu)勢(shì),其實(shí)都是類型系統(tǒng)所帶來的強(qiáng)類型語言所具有的開發(fā)優(yōu)勢(shì),無論是在開發(fā)體驗(yàn)還是后期項(xiàng)目維護(hù)上,都要優(yōu)于目前的。 大半夜的JavaScript Weekly發(fā)來賀電:TypeScript 2.0 Final Released! 沒錯(cuò),繼Angular2發(fā)布之后,TypeScript今天也發(fā)布了2.0版本,這不禁讓我浮想一番。如果要說TS和JS最明顯的差別,我想一定是Type Syst...

    wangzy2019 評(píng)論0 收藏0
  • 從 JavaScript 到 TypeScript - 模塊化構(gòu)建

    摘要:不過,相對(duì)于靜態(tài)類型檢查帶來的好處,這些代價(jià)是值得的。當(dāng)然少不了的模塊化標(biāo)準(zhǔn),雖然到目前為止和大部分瀏覽器都還不支持它。本身支持兩種模塊化方式,一種是對(duì)的模塊的微小擴(kuò)展,另一種是在發(fā)布之前本身模仿的命名空間。有一種情況例外。 TypeScript 帶來的最大好處就是靜態(tài)類型檢查,所以在從 JavaScript 轉(zhuǎn)向 TypeScript 之前,一定要認(rèn)識(shí)到添加類型定義會(huì)帶來額外的工作量...

    Jonathan Shieber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<