摘要:出于某些原因,近期開始需要在公司推廣使用寫服務(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):
最最基礎(chǔ)的肯定是編譯ts文件了,這里用到的就是gulp-typescript和gulp-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
摘要:感謝大神的免費(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í)讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:感謝大神的免費(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í)讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:這些優(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...
摘要:不過,相對(duì)于靜態(tài)類型檢查帶來的好處,這些代價(jià)是值得的。當(dāng)然少不了的模塊化標(biāo)準(zhǔn),雖然到目前為止和大部分瀏覽器都還不支持它。本身支持兩種模塊化方式,一種是對(duì)的模塊的微小擴(kuò)展,另一種是在發(fā)布之前本身模仿的命名空間。有一種情況例外。 TypeScript 帶來的最大好處就是靜態(tài)類型檢查,所以在從 JavaScript 轉(zhuǎn)向 TypeScript 之前,一定要認(rèn)識(shí)到添加類型定義會(huì)帶來額外的工作量...
閱讀 1240·2021-11-25 09:43
閱讀 1349·2021-09-26 09:55
閱讀 2410·2021-09-10 11:20
閱讀 3378·2019-08-30 15:55
閱讀 1455·2019-08-29 13:58
閱讀 1180·2019-08-29 12:36
閱讀 2353·2019-08-29 11:18
閱讀 3418·2019-08-26 11:47