webpack重點(diǎn)配置實(shí)踐總結(jié)

歷程

第一次接觸webpack是在前些日子用Vue開發(fā)了一些簡(jiǎn)單demo(todoList)躏率,并且隨后又開發(fā)了本博客的一些功能,想用Vue組件文件開發(fā)爵政?碴裙,想用ES6語法钢悲?就必須上webpack了,其實(shí)之前對(duì)這構(gòu)建工具很是抵觸舔株,配置麻煩莺琳,搞一大堆文件看得頭暈?zāi)X脹,但又不得不用载慈,稍微用熟了一點(diǎn)之后惭等,特別是各種cli工具出來后,不得不說我之前的想法腦殘了办铡,真的是好用方便辞做。下面文章中總結(jié)一下我使用過程中遇到的坑和一些重要的配置。

關(guān)于模塊系統(tǒng)

Webpack可以將許多松散的模塊按照依賴和規(guī)則打包成符合生產(chǎn)環(huán)境部署的前端資源寡具。還可以將按需加載的模塊進(jìn)行代碼分隔秤茅,等到實(shí)際需要的時(shí)候再異步加載。通過 loader 的轉(zhuǎn)換童叠,任何形式的資源都可以視作模塊框喳,比如 CommonJs 模塊、 AMD 模塊厦坛、 ES6 模塊五垮、CSS、圖片杜秸、 JSON拼余、Coffeescript、 LESS 等亩歹。

而現(xiàn)在web前端這塊兒大部分都在使用ES6模塊

import "jquery";
export function doStuff() {}
module "localModule" {}

出入口文件配置

 module.exports = {
  entry:{ 
  app:'./src/main.js'//入口文件
  },
  output: {
      path:path.resolve(__dirname, '../dist'),//存放打包后文件的輸出目錄
      publicPath:'/',//指定資源文件引用的目錄
      filename: 'app.bundle.js',//打包文件名
  },

說明:

  • __dirname:node.js中的一個(gè)全局變量匙监,它指向當(dāng)前執(zhí)行腳本所在的目錄。
  • publicPath:指定資源文件在哪個(gè)目錄引用小作,這個(gè)取決于你網(wǎng)站的根目錄(index.html所在位置)的位置亭姥,我此處設(shè)置為'/',即表示資源文件在當(dāng)前目錄顾稀,這個(gè)在路徑引用的時(shí)候需要特別注意达罗。
  • 如果想要build多個(gè)文件,在entry選項(xiàng)中加入就行静秆,如:
entry: ['./app.js', './utils.js']

使用別名

看如下配置:

 resolve: {
    extensions: ['', '.js', '.vue'],
    fallback: [path.join(__dirname, '../node_modules')],
    alias: {
      'vue$': 'vue/dist/vue',
      'src': path.resolve(__dirname, '../src'),
      'assets': path.resolve(__dirname, '../src/assets'),
      'components': path.resolve(__dirname, '../src/components'),
      "jquery": path.resolve(__dirname, '../node_modules/jquery/dist/jquery.slim.min.js'),
      "bootstrap": path.resolve(__dirname, '../src/plugin/bootstrap'),
    }
  }

說明:

  • extensions:用于指明程序自動(dòng)補(bǔ)全識(shí)別哪些文件后綴
  • fallback:添加項(xiàng)目中的node_modules目錄到解析路徑中,防止模塊無法被找到粮揉,這個(gè)地方還有另一個(gè)設(shè)置同樣需要添加:
resolveLoader: {//此配置項(xiàng)和resolve平行
    fallback: [path.join(__dirname, '../node_modules')]
  }
  • alias:它的作用是把用戶的一個(gè)請(qǐng)求重定向到另一個(gè)路徑,以便在其他文件中進(jìn)行引用的時(shí)候可以更方便抚笔,這個(gè)配置在插件和依賴以及靜態(tài)資源比較多的時(shí)候炒雞好用扶认,大大節(jié)省時(shí)間。
  • path.resolve:使用前需要注意先在文件頭部引入path模塊:
var path = require('path')

Loader

Webpack 本身只能處理 JavaScript 模塊殊橙,如果要處理其他類型的文件辐宾,就需要使用 loader 進(jìn)行轉(zhuǎn)換,看如下配置:

module: {
    noParse: [],
    loaders: [
      //css和sass分開加載
      { test: /\.scss$/,
        loader: ExtractTextPlugin.extract(
          "style-loader",
          "css-loader!sass-loader?sourceMap",
          {
            // 圖片膨蛮、字體資源打包到css上級(jí)目錄
            publicPath: "../"
          }
        )
      },
      { test: /\.css$/,
        loader: ExtractTextPlugin.extract(
          "style-loader",
          "css-loader?sourceMap",
          {
            // 圖片叠纹、字體資源打包到css上級(jí)目錄
            publicPath: "../"
          }
        )
      },
      //vue
      {
        test: /\.vue$/,
        loader: 'vue'
      },
      // babel處理es6
      {
        test: /\.js?$/,
        exclude: [
          node_modules
        ],
        loader: 'babel'
      },
      // 圖片及字體打包
      {
        test: /\.(ttf|eot|svg|png|gif|woff(2)?)(\?.*?)?$/,
        loader: "file-loader"
      }
    ]
  }

說明:

  • ExtractTextPlugin:上面加載css和sass的時(shí)候用到ExtractTextPlugin,這是一個(gè)CSS文件單獨(dú)抽取的插件敞葛,可以生成便于開發(fā)環(huán)境測(cè)試的CSS source-map 并且減少DOM操作(因?yàn)樵趙ebpack默認(rèn)對(duì)css打包壓縮的處理中誉察,對(duì)css文件經(jīng)過處理之后是在js文件中然后通過在頁面的style中插入),在下面將講解的代碼中進(jìn)行插件配置才能使其生效惹谐。
  • noParse:此配置中noParse沒有進(jìn)行配置持偏,但是這是一個(gè)很有用的選項(xiàng),如果你確定一個(gè)模塊中沒有其它新的依賴 就可以配置這項(xiàng)豺鼻,webpack 將不再掃描這個(gè)文件中的依賴综液,從而減少了打包時(shí)間,大大提高效率儒飒。如果不在乎構(gòu)建時(shí)間可以不配置這個(gè)谬莹,畢竟人腦都容易出錯(cuò),隨時(shí)都會(huì)記錯(cuò)很多東西桩了。

另外

比如用到了vue附帽,要想把vue里的sass文件單獨(dú)提取出來在這里就需要進(jìn)行單獨(dú)配置:

vue: {
  loaders: {
    sass: ExtractTextPlugin.extract('vue-style-loader', 'css-loader', 'sass-loader')
  }
}

插件

插件可以完成更多 loader 不能完成的功能

這就到了上面提到的ExtractTextPlugin,需要在這里配置:

plugins: [
    // 配置以文件形式打包c(diǎn)ss
    new ExtractTextPlugin("css/[name].css?[hash]-[chunkhash]-[contenthash]-[name]", {
      disable: false,
      allChunks: true
    })
  ]

同時(shí)不能忘記了引入:

var ExtractTextPlugin = require("extract-text-webpack-plugin");

使用Webpack加載的第三方庫或插件中井誉,基本上都需要依賴另外一些庫蕉扮,例如jQuery,所以這里提一下在webpack項(xiàng)目中使用jquery的配置颗圣,我們?cè)谇懊娴膭e名配置中已經(jīng)定義好了jquery文件位置喳钟,進(jìn)行如下配置:

plugins: [
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      jquery: "jquery",
      "window.jQuery": "jquery",
    })
  ]

此配置提供了一個(gè)自定義的插件屁使,可以使jquery變成全局變量,你不用在自己的開發(fā)文件中import "jquery";了奔则,免去了很多麻煩蛮寂。

以上總結(jié)的這些差不多是webpack最基本的配置了,實(shí)際開發(fā)和生產(chǎn)環(huán)境中會(huì)有更多的Loaders和插件引入易茬,比如熱加載插件酬蹋、html-webpack-plugin、CommonsChunkPlugin等等抽莱,總之在配置和修改配置的時(shí)候要盡量細(xì)心范抓,畢竟配置繁多,很輕易就出錯(cuò)了食铐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匕垫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子璃岳,更是在濱河造成了極大的恐慌年缎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铃慷,死亡現(xiàn)場(chǎng)離奇詭異单芜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)犁柜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門洲鸠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馋缅,你說我怎么就攤上這事扒腕。” “怎么了萤悴?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瘾腰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我覆履,道長(zhǎng)蹋盆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任硝全,我火速辦了婚禮栖雾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伟众。我一直安慰自己析藕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布凳厢。 她就那樣靜靜地躺著账胧,像睡著了一般竞慢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上治泥,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天梗顺,我揣著相機(jī)與錄音,去河邊找鬼车摄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仑鸥,可吹牛的內(nèi)容都是我干的吮播。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼眼俊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼意狠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疮胖,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤环戈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后澎灸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體院塞,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年性昭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拦止。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糜颠,死狀恐怖汹族,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情其兴,我是刑警寧澤顶瞒,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站元旬,受9級(jí)特大地震影響榴徐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜法绵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一箕速、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朋譬,春花似錦盐茎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽探越。三九已至,卻和暖如春窑业,著一層夾襖步出監(jiān)牢的瞬間钦幔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工常柄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲤氢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓西潘,卻偏偏與公主長(zhǎng)得像卷玉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喷市,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載腹备。 webpack介紹和使用 一衬潦、webpack介紹 1、由來 ...
    it筱竹閱讀 11,116評(píng)論 0 21
  • GitChat技術(shù)雜談 前言 本文較長(zhǎng)馏谨,為了節(jié)省你的閱讀時(shí)間别渔,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,691評(píng)論 7 110
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺惧互,特此分享以備自己日后查看哎媚,也希望更多的人看到...
    小小字符閱讀 8,160評(píng)論 7 35
  • 松松謝謝你,謝謝你給我寫了這封信喊儡〔τ耄看完信好像感覺到有一縷陽光射進(jìn)來,照亮了心中的一個(gè)小角落艾猜! 我很感謝你...
    燕子Diana閱讀 508評(píng)論 0 2
  • 文/見聞不是百曉生 我叫朔夜买喧,是你的心魔。 我曾經(jīng)有過很多名字匆赃,但是最喜歡的還是這一個(gè)淤毛。 朔夜,朔望之夜算柳,多么絕望...
    見聞不是百曉生閱讀 598評(píng)論 45 17