ECMAScript6--1.2創(chuàng)建js編譯任務腳本

util/args.js

    //引入一個包雇初,處理命令行參數(shù)的;(之前的操作都是手動敲命令减响,真正程序里靖诗,怎么去識別在命令行這個工具里輸入的那些東西郭怪,需要程序識別,需要引入一個包刊橘,幫我們做處理)
import yargs from 'yargs';

//定義一些基本的參數(shù):區(qū)分開發(fā)環(huán)境和線上環(huán)境鄙才;
//option敲命令行的時候有個選項部分;比如 gulp -production; -production就是選項部分促绵;

const args = yargs
    //提取參數(shù)的攒庵;區(qū)分命令行輸入的是不是有這個參數(shù),進而區(qū)分是線上還是開發(fā)環(huán)境
    .option('production',{
        boolean:true,
        default:false //如果命令行中沒有輸入這個選項--參數(shù)败晴;false就是開發(fā)環(huán)境;
        describe:'min all scripts'
    }) 

     //還有一個參數(shù)浓冒,控制要不要監(jiān)聽開發(fā)環(huán)境中修改的這些文件,比如說:改了一個js要
     不要自動編譯尖坤,改了個css要不要自動編譯稳懒,需要命令行控制(敲命令的時候可以控制),
     用watch參數(shù)來控制慢味;
     .option('watch',{
        boolean:true,
        default:false, 
        describe:'watch all files'
     })
     
     //要不要詳細的輸出命令行執(zhí)行的一個日志场梆;
     .option('verbose',{
        boolean:true,
        default:false, 
        describe:'log'
     })
    
    //關于zon映射的東西,js通常壓縮有一個sourcemaps就是來處理這個參數(shù)的贮缕;
    .option('sourcemaps',{
        //強制生成sourcemaps;
        describe:'force the creation of sourcemaps'
    })

    //啟動服務辙谜,設置服務器端口
    .option('port',{
        string:true,
        default:8080,
        describe:'server port'
    })
    
    //對輸入的命令行內容以字符串解析
    .argv

tasks/scripts.js

//先引完這些包,在安裝感昼,現(xiàn)在不用執(zhí)行命令装哆,不著急安裝,現(xiàn)在先知道我們要用哪些包定嗓,然后我們在去安裝蜕琴;正常使用,要安裝這些包宵溅;安裝這些包要使用npm install命令凌简,我們之前創(chuàng)建了package.json這個文件,我們可以直接使用npm install這個命令后面緊跟著要安裝包的名稱恃逻,npm install gulp gulpif gulp-concat webpack webpack-stream
vinyl-named gulp-livereload gulp-plumber gulp-rename gulp-uglify      gulp- util yargs  --save-dev (--save-dev表示要把這個文件除了安裝以外還要在package.json這個文件中創(chuàng)建一個安裝包依賴的一些字段)

 //如果在安裝包的過程中雏搂,發(fā)現(xiàn)哪些包不能正常安裝或者安裝比較慢,可以使用npm鏡像淘寶解決網(wǎng)速慢或者安裝慢寇损,某些包安裝失敗的問題凸郑;

//引入幾個包,第一個是gulp,整個構建都是基于gulp矛市;
import gulp from 'gulp';
//gulp的語句中做if判斷的;
import gulpif from 'gulp-if';
//gulp中處理文件拼接的芙沥;
import concat form 'gulp-concat';
//整個打包過程是用webpack做的,引入webpack工具包;
import webpack from 'webpack';
/*引入webpack-stream,gulp處理的都是一些文件流,是基于stream而昨,
對webpack的處理結合webpack-stream來做處理的救氯;*/
import gulpWebpack from 'webpack-stream';
//對文件重命名做標志的包;
import named from 'vinyl-named' ;
//實現(xiàn)一個文件修改后歌憨,瀏覽器自動刷新的功能着憨,熱更新;
import livereload from 'gulp-livereload';
//處理文件信息流的--管道拼接务嫡;
import plumber form 'gulp-plumber';
//對文件重命名;
import rename from 'gulp-rename';
//處理js享扔、css壓縮的;
import uglify from 'gulp-uglify';
//在命令行工具輸出的一些包,log和一些色彩的輸出植袍;
import {log,colors} from 'gulp-util';
//引入對命令行參數(shù)進行解析的一個包;
import args from './util/args.js';

//創(chuàng)建gulp的任務籽懦;
gulp.task('scripts',()=>{
    //打開這個js
    return gulp.src(['app/js/index.js']);
    //處理常規(guī)的錯誤邏輯于个;
    .pipe(plumber({
        errorHandle:function(){
        
        }
    }))
    //對文件重新命名
    .pipe(named())
    //對js進行編譯
    .pipe(gulpWebpack({
        module:{
            loaders:[{
                test:/\.js$/,
                loader:'babel'
            }]
        }
    }),null,(err,stats)=>{
        log(`Finished '${colors.cyan('scripts')}'`,stats.toString({
            chunks:false
          }))
    })
    //編譯完文件要放在指定路徑;使用gulp.dest之后使用這個路徑暮顺;
    //server中要拿到最新的js(編譯好的js)厅篓,才能在整個服務中跑起來;
    .pipe(gulp.dest('server/public/js'))
   
    /*處理編譯壓縮的過程捶码;讓開發(fā)者識別壓縮包的文件羽氮,可以用重命名的方式,
    在重新備份剛編譯好的文件惫恼,用rename這個方式做档押;
    通過這個.min.js寫法把剛才生成的文件重新復制了一份,復制的這份在基礎上
    壓縮祈纯。
    */
    .pipe(rename({
        basename:'cp',
        extname:'.min.js'
    }))
    
    //壓縮;壓縮過程要配置怎么壓縮令宿;
    .pipe(uglify({compress:{properties:false},output:{'quote_keys':true}}))
    
    /*存儲到某個地方的命令;這個目錄下有兩個文件腕窥,編譯好的沒壓縮的粒没,編譯好的
    壓縮了,壓縮之后那個文件叫cp.min.js*/
    .pipe(gulp.dest('server/public/js'))
    
    /*監(jiān)聽一個文件簇爆,變化了自動刷新這個功能癞松;用gulpif做一下判斷,判斷命令行
    有watch這個參數(shù)入蛆,就執(zhí)行l(wèi)ivereload响蓉;如果沒有就不會對文件進行監(jiān)聽;也就不會自動刷新了*/
    .pipe(gulpif(args.watch,livereload()))
    
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末安寺,一起剝皮案震驚了整個濱河市厕妖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖言秸,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件软能,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機炸站,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門彭雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跋核,你說我怎么就攤上這事∨崖颍” “怎么了砂代?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長率挣。 經(jīng)常有香客問我刻伊,道長,這世上最難降的妖魔是什么椒功? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任捶箱,我火速辦了婚禮,結果婚禮上动漾,老公的妹妹穿的比我還像新娘丁屎。我一直安慰自己,他們只是感情好旱眯,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布晨川。 她就那樣靜靜地躺著,像睡著了一般键思。 火紅的嫁衣襯著肌膚如雪础爬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天吼鳞,我揣著相機與錄音看蚜,去河邊找鬼。 笑死赔桌,一個胖子當著我的面吹牛供炎,可吹牛的內容都是我干的。 我是一名探鬼主播疾党,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼音诫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雪位?” 一聲冷哼從身側響起竭钝,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后香罐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卧波,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年庇茫,在試婚紗的時候發(fā)現(xiàn)自己被綠了港粱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡旦签,死狀恐怖查坪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情宁炫,我是刑警寧澤偿曙,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站羔巢,受9級特大地震影響遥昧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜朵纷,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望永脓。 院中可真熱鬧袍辞,春花似錦、人聲如沸常摧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽落午。三九已至谎懦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溃斋,已是汗流浹背界拦。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梗劫,地道東北人享甸。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像梳侨,于是被迫代替她去往敵國和親蛉威。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容