【webpack4 系列之一】

第一: 先說(shuō)開(kāi)發(fā)環(huán)境,使用vscode, github:

https://github.com/hyyfrank/webpack4.git

概念啥的很多地方都講過(guò)了,這里水一下,請(qǐng)看文檔:

https://www.webpackjs.com/concepts/

OK, 接著開(kāi)始講怎么用,一般項(xiàng)目需要的功能,我們一個(gè)個(gè)做,先做個(gè)例子,看看打包大概流程是怎么樣的,不bb.

  1. 先用npm初始化項(xiàng)目,當(dāng)然用yarn也行,執(zhí)行npm -init -y 就生成package.json文件了(最好換cnpm稍微快點(diǎn))

  2. 先去vscode的plugin下一個(gè)html boilerplate然后寫(xiě)html就舒服了,先寫(xiě)個(gè)html,這時(shí)候只要簡(jiǎn)單建個(gè)文件輸入html:5回車(chē),就得到一個(gè)簡(jiǎn)單的html5文件了

  3. 簡(jiǎn)單加個(gè)css文件和js文件,那三劍客就齊了,這也是最網(wǎng)頁(yè)最簡(jiǎn)單的樣子了


  <!DOCTYPE html>

  <html lang="en">

  <head>

      <meta charset="UTF-8">

      <meta name="viewport" content="width=device-width, initial-scale=1.0">

      <meta http-equiv="X-UA-Compatible" content="ie=edge">

      <link rel="stylesheet" href="./main.css">

      <title>Hello Webpack</title>

  </head>

  <body>

      <h2>Say hello to webpack4!</h2>

      <script src="./bundle.js"></script>

  </body>

  </html>

  1. 為了簡(jiǎn)單看到html網(wǎng)頁(yè)的效果,我們裝個(gè)庫(kù):cnpm install http-server -g

  2. 我要用webpack自然得裝下,cnpm install webpack -g

  3. 啟動(dòng)網(wǎng)頁(yè),用我們剛才得http-server: http-server -p 3000

訪(fǎng)問(wèn)http://127.0.0.1:3000/就能看到簡(jiǎn)單頁(yè)面

———臥室分割線(xiàn)-------------

簡(jiǎn)單網(wǎng)頁(yè)打完收工。接著就是來(lái)使用webpack來(lái)打包和混淆了js了。

  1. 先簡(jiǎn)單試一下:./node_modules/webpack/bin/webpack.js ./main.js bundle.js

然后你去把html 里的js的src改成bundle.js,打開(kāi)網(wǎng)頁(yè)看下,也是好的,說(shuō)明webpack已經(jīng)把main.js打包成bundle.js了,你可以去看下里邊代碼長(zhǎng)什么樣,有個(gè)了解

  1. 當(dāng)然,我不能每次都自己動(dòng)手去改這個(gè)html和輸入命令吧,所以我們webpack提供了配置文件的方式來(lái)讓你寫(xiě),結(jié)合package.json里的scripts部分,可以讓我們加命令,這樣就不會(huì)敲命令敲到手軟了

——臥室分割線(xiàn)-------

  1. 開(kāi)始正式打包
  • web pack.config.js長(zhǎng)這樣:

    
    const path = require("path");
    
    
    
    module.exports = {
    
      entry: {
    
        app: "./src/main.js"
    
      },
    
      output: {
    
        publicPath: __dirname + "/build/", // js引用路徑或者CDN地址
    
        path: path.resolve(__dirname, "build"), // 打包文件的輸出目錄
    
        filename: "bundle.js"
    
      }
    
    };
    
    

和我們剛才命令行差不多,不過(guò)這次用配置文件的方式展示出來(lái),啥意思呢,就是上面注釋那意思。什么,你不知道entry和output的意思,拜托,稍微看下文檔,中文的也行啊,起碼有個(gè)大概了解【參考文章開(kāi)始的鏈接】,寫(xiě)完這個(gè),直接在當(dāng)前目錄下打webpack命令搞定!

然后我們把命令放在package.json里的scripts部分,以后直接npm run build就跑這個(gè)構(gòu)建命令,就方便了,如下:(這里webpack是全局裝的,方便點(diǎn))


"build": "webpack"

OK,那我每次執(zhí)行完構(gòu)建,會(huì)生成一個(gè)build目錄,我不想每次自己手動(dòng)去刪掉,所以,我們可以構(gòu)建之前先刪除這個(gè)文件,然后再開(kāi)始構(gòu)建,簡(jiǎn)單裝個(gè)酷,cnpm install rmdir-cli,然后我們的package.json里的build腳本變成:


"build": "rmdir-cli build && webpack --watch"

稍微調(diào)整下文件結(jié)構(gòu),加個(gè)src目錄來(lái)放js, 只需要修改下webpack.config.js里的entry的路徑就可以了,當(dāng)然了你html如果要應(yīng)用到文件,js的src要改成從build中去取就行了,詳細(xì)代碼看我的github repo,watch就是為了你能監(jiān)聽(tīng)文件的變化,修改文件webpack重新編譯你也能看到

因?yàn)橹С謜ebpack支持ES6、CommonJs和AMD規(guī)范,所以都可以在js里去寫(xiě),舉個(gè)栗子,加上es6:

main.js


import addtwo from "./add"

console.log("javascript say hello.")

addtwo(1,2)

add.js


export default (a, b) => {

    console.log("a+b =",a+b)

    return a + b;

}

重新構(gòu)建下,跑一下,看看打開(kāi)html里的chrome dev tool,看看a+b=3有沒(méi)有打出來(lái)。搞定!

看一眼打完包是什么樣子


!function(e) {

    var t = {};

    function r(n) {

        if (t[n])

            return t[n].exports;

        var o = t[n] = {

            i: n,

            l: !1,

            exports: {}

        };

        return e[n].call(o.exports, o, o.exports, r),

        o.l = !0,

        o.exports

    }

    r.m = e,

    r.c = t,

    r.d = function(e, t, n) {

        r.o(e, t) || Object.defineProperty(e, t, {

            enumerable: !0,

            get: n

        })

    }

    ,

    r.r = function(e) {

        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {

            value: "Module"

        }),

        Object.defineProperty(e, "__esModule", {

            value: !0

        })

    }

    ,

    r.t = function(e, t) {

        if (1 & t && (e = r(e)),

        8 & t)

            return e;

        if (4 & t && "object" == typeof e && e && e.__esModule)

            return e;

        var n = Object.create(null);

        if (r.r(n),

        Object.defineProperty(n, "default", {

            enumerable: !0,

            value: e

        }),

        2 & t && "string" != typeof e)

            for (var o in e)

                r.d(n, o, function(t) {

                    return e[t]

                }

                .bind(null, o));

        return n

    }

    ,

    r.n = function(e) {

        var t = e && e.__esModule ? function() {

            return e.default

        }

        : function() {

            return e

        }

        ;

        return r.d(t, "a", t),

        t

    }

    ,

    r.o = function(e, t) {

        return Object.prototype.hasOwnProperty.call(e, t)

    }

    ,

    r.p = "/Users/hyy/github/webpack4/build/",

    r(r.s = 0)

}([function(e, t, r) {

    "use strict";

    r.r(t);

    console.log("javascript say hello."),

    ((e,t)=>(console.log("a+b =", e + t),

    e + t))(1, 2)

}

]);

今天困了,先寫(xiě)到這吧,不知道說(shuō)啥了,扯個(gè)淡收?qǐng)霭桑?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容