搭建ts運(yùn)行環(huán)境Playground

功能: 在ts 代碼編寫保存后就能查看到編譯后的ts代碼以及編譯信息和運(yùn)行結(jié)果,因此我們需要一個(gè)工具何暮,能夠監(jiān)控源代碼文件的變化,并在監(jiān)控到變化之后自動(dòng)啟動(dòng)編譯過(guò)程并在編譯成功之后執(zhí)行編譯的JS腳本铐殃。

需要的工具

  1. gulp 構(gòu)建工具
  2. ts-node
    1. gulp 的配置文件 gulpfile.ts 本身是可以使用ts 來(lái)寫的海洼,如果使用ts 那么需要ts-node的支持
  3. gulp-typescript
    1. 為了能在gulp 中編譯ts 腳本,需要gulp-typescript 插件
  4. child_process
    1. 為了能在gulp 中執(zhí)行腳本富腊,需要用到node 中的 child_process 模塊來(lái)開啟進(jìn)程
  5. watch()
    1. gulp 提供的坏逢,用來(lái)監(jiān)聽文件的變化 ,并觸發(fā)編譯和運(yùn)行任務(wù)赘被。

創(chuàng)建項(xiàng)目并安裝依賴

  1. 創(chuàng)建目錄 mkdir ts-playground
  2. 初始化 npm init -y
  3. 安裝以來(lái) npm i -D typescript ts-node gulp gulp-typescript
  4. 初始化typescript npx tsc --init
  5. 安裝gulp類型檢查 npm i -D @types/gulp @types/gulp-typescript

編寫 gulpfile.ts 配置文件

編寫compile 方法

compile 方法是整,將指定目錄下ts 文件編譯后輸出到指定目錄下。

import {  src, dest, watch ,series } from "gulp";
import ts from "gulp-typescript";


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

function compile(){
    // 使用src 引入源代碼
    const tsResult = src("src/**/*.ts")
    .pipe(tsProject());

    // 將編譯的結(jié)果輸出到 dist 目錄
    return tsResult.js.pipe(dest("./dist"));
}

// 導(dǎo)出任務(wù)
export { compile };

執(zhí)行任務(wù): npx gulp compile 表示執(zhí)行 創(chuàng)建的compile任務(wù)民假。

image.png

編寫 run 方法

執(zhí)行編譯后的js 腳本文件

import { src, dest, watch, series } from "gulp";
import ts from "gulp-typescript";
import { exec } from "child_process";

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

function compile() {
    // 使用src 引入源代碼
    const tsResult = src("src/**/*.ts")
        .pipe(tsProject());

    // 將編譯的結(jié)果輸出到 dist 目錄
    return tsResult.js.pipe(dest("./dist"));
}


/**
 * 執(zhí)行腳本
 */
function run(): Promise<any> {


    return new Promise(resolve => {
        // stdout 標(biāo)準(zhǔn)輸入 浮入, stderr 標(biāo)準(zhǔn)錯(cuò)誤
        exec("node ./dist/", (err, stdout, stderr) => {
            console.log(stdout);

            if (stderr) {
                console.log(stderr);

            }

            resolve(err);

        })
    })


}

export { compile };

//使用 series 將兩個(gè)任務(wù)連接起來(lái),先運(yùn)行 compile 將文件編譯成js 放到dist 目錄下羊异,
//在執(zhí)行 run 事秀, 運(yùn)行dist 目錄下的js 腳本
export default series(compile , run);

執(zhí)行命令 npx gulp

image.png

編寫watch 方法

監(jiān)聽 ts 文件的變化彤断,然后做出操作。

import { src, dest, watch, series } from "gulp";
import ts from "gulp-typescript";
import { exec } from "child_process";

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

function compile() {
    // 使用src 引入源代碼
    const tsResult = src("src/**/*.ts")
        .pipe(tsProject());

    // 將編譯的結(jié)果輸出到 dist 目錄
    return tsResult.js.pipe(dest("./dist"));
}


/**
 * 執(zhí)行腳本
 */
function run(): Promise<any> {


    return new Promise(resolve => {
        // stdout 標(biāo)準(zhǔn)輸入 秽晚, stderr 標(biāo)準(zhǔn)錯(cuò)誤
        exec("node ./dist/", (err, stdout, stderr) => {
            console.log(stdout);

            if (stderr) {
                console.log(stderr);

            }

            resolve(err);

        })
    })


}

/**
 * 監(jiān)聽
 */
function watchTs(){
    // 定義監(jiān)聽 src 目錄下的 ts 文件瓦糟,如果有變化就執(zhí)行 compile 和 run 函數(shù)
    watch("src/**/*.ts" ,  series(compile , run));
}

export { compile , watchTs as watch };


// 使用 series 將兩個(gè)任務(wù)連接起來(lái),先運(yùn)行 compile 將文件編譯成js 放到dist 目錄下赴蝇,在執(zhí)行 run 菩浙, 運(yùn)行dist 目錄下的js 腳本
export default series(compile , run);

執(zhí)行命令 npx gulp watch

image.png

這是你會(huì)發(fā)現(xiàn),當(dāng)你修改左邊的index.ts 文件后保存句伶,右邊的index.js 文件也會(huì)跟著修改劲蜻。并且在控制臺(tái)執(zhí)行了 index.js

<a name="lxuCu"></a>

package.json 自定義命令

為了方便,可以編寫一些自定義命令

{
  "name": "ts-playground",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "gulp watch",
    "build": "gulp"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/gulp": "^4.0.9",
    "@types/gulp-typescript": "^2.13.0",
    "gulp": "^4.0.2",
    "gulp-typescript": "^6.0.0-alpha.1",
    "ts-node": "^10.8.2",
    "typescript": "^4.7.4"
  }
}

博客地址:http://kafeim.cn/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末考余,一起剝皮案震驚了整個(gè)濱河市先嬉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楚堤,老刑警劉巖疫蔓,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異身冬,居然都是意外死亡衅胀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門酥筝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滚躯,“玉大人,你說(shuō)我怎么就攤上這事嘿歌〉停” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宙帝,是天一觀的道長(zhǎng)丧凤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)步脓,這世上最難降的妖魔是什么息裸? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮沪编,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘年扩。我一直安慰自己蚁廓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布厨幻。 她就那樣靜靜地躺著相嵌,像睡著了一般腿时。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饭宾,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天批糟,我揣著相機(jī)與錄音,去河邊找鬼看铆。 笑死徽鼎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弹惦。 我是一名探鬼主播否淤,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棠隐!你這毒婦竟也來(lái)了石抡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤助泽,失蹤者是張志新(化名)和其女友劉穎啰扛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗡贺,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隐解,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暑刃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厢漩。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖岩臣,靈堂內(nèi)的尸體忽然破棺而出溜嗜,到底是詐尸還是另有隱情,我是刑警寧澤架谎,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布炸宵,位于F島的核電站,受9級(jí)特大地震影響谷扣,放射性物質(zhì)發(fā)生泄漏土全。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一会涎、第九天 我趴在偏房一處隱蔽的房頂上張望裹匙。 院中可真熱鬧,春花似錦末秃、人聲如沸概页。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惰匙。三九已至技掏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間项鬼,已是汗流浹背哑梳。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绘盟,地道東北人鸠真。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奥此,于是被迫代替她去往敵國(guó)和親弧哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353