webpack 插件使用總結(jié)

extract-text-webpack-plugin

用途:提取單獨css文件
不使用extract-text-webpack-plugin插件時的寫法:

{
        test: /\.css$/,
        loader: 'style-loader!css-loader'
 },

這時head里會插入style標簽椿疗,加入樣式:

Paste_Image.png

dist目錄無單獨css文件:

Paste_Image.png

使用extract-text-webpack-plugin的寫法:

{
       test: /\.css$/,
       loader: ExtractTextPlugin.extract('style-loader','css-loader')
 },

這時可以看到dist目錄下生成了單獨的index.css文件妈踊。通過在html中l(wèi)ink標簽去引用杯聚,即實現(xiàn)了css與js的分離侦厚。

看下webpack打包生成的js文件:

/******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};
/******/
/******/    // The require function
/******/    function __webpack_require__(moduleId) {
/******/
/******/        // Check if module is in cache
/******/        if(installedModules[moduleId])
/******/            return installedModules[moduleId].exports;
/******/
/******/        // Create a new module (and put it into the cache)
/******/        var module = installedModules[moduleId] = {
/******/            exports: {},
/******/            id: moduleId,
/******/            loaded: false
/******/        };
/******/
/******/        // Execute the module function

//關(guān)鍵:這里為什么要用call?
/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/        // Flag the module as loaded
/******/        module.loaded = true;
/******/
/******/        // Return the exports of the module
/******/        return module.exports;
/******/    }
/******/
/******/
/******/    // expose the modules object (__webpack_modules__)
/******/    __webpack_require__.m = modules;
/******/
/******/    // expose the module cache
/******/    __webpack_require__.c = installedModules;
/******/
/******/    // __webpack_public_path__
/******/    __webpack_require__.p = "";
/******/
/******/    // Load entry module and return exports
/******/    return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ({

/***/ 0:
/***/ function(module, exports, __webpack_require__) {

    /*
    * @Author: yqy
    * @Date:   2016-12-05 18:33:36
    * @Last Modified by:   yuqy
    * @Last Modified time: 2016-12-08 19:04:52
    */
    
    'use strict';
    // require('./index.scss');
    
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.index = undefined;
    
    __webpack_require__(5);
    
    var index = {
      init: function init() {
        console.log('index');
      }
    };exports.index = index;
    // require('./index.css');

/***/ },

/***/ 5:
/***/ function(module, exports) {

    // removed by extract-text-webpack-plugin

/***/ }

/******/ });
//# sourceMappingURL=index.js.map

可以看到:webpack整個結(jié)構(gòu)是一個立即執(zhí)行函數(shù):

(function(){
})({0:funciton(){}, 1: function(){}})

webpack把每個模塊整個都分配一個id舌仍,放在一個function里面拄养,這個function通常會有2-3個參數(shù)轿衔,分別是:module, exports, webpack_require腮鞍,第三個參數(shù)webpack_require根據(jù)文件里是否引入其他模塊而決定有無這個參數(shù),這些function組合成一個大的對象道盏,或者一個大的函數(shù)數(shù)組扔給立即執(zhí)行函數(shù)作為參數(shù)進去立即執(zhí)行而柑。

webpack_require這個函數(shù)的作用是返回module.exports上的對象文捶。

return {
    exports: {導出的整個對象},
    id: 0,
    loaded: true 
}

commonsChunckPlugin

webpack本身內(nèi)置了一些插件,還可以通過npm 安裝第三方插件媒咳。commonsChunckPlugin就是webpack內(nèi)置的一個插件粹排。
有關(guān)此插件options設(shè)置請參考:https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin
大致的參數(shù)有:
name/names: 傳遞數(shù)組的話會多次觸發(fā)
filename:
miniChunks:
chunks:
children:
async:
miniSize:

關(guān)于miniChunks:
取值范圍:>=2 <=max(chunk),
設(shè)置為 Infinity時,文檔里說道:
just creates the commons chunk, but moves no modules into it.
我的理解是設(shè)置Infinity以后涩澡,會去讀取common對應的數(shù)組顽耳,只打包這些內(nèi)容,不會去檢查entry所有文件之間的公共模塊了妙同。

為什么要用commonsChunckPlugin這個插件射富?
官方用途第一條解釋的好:

Generate an extra chunk, which contains common modules shared between entry points.

下面是我的理解:

假設(shè)你有a頁面index.js,b頁面list.js粥帚,兩個頁面都需要用到jquery. 于是你分別在a,b頁面require('jquery')胰耗。 這時你打包完成的js中,會發(fā)現(xiàn)dist/index.js芒涡、dist/list.js中都打包了一份jquery柴灯。這樣你的整個項目的體積(zip)就會非常大了,因為每個頁面的入口文件里面都有一份重復的jquery费尽。這時commonschunkPlugin就需要引入進來了赠群。同理CSS,也可以抽取公用的模塊旱幼。

//這是入口文件查描,兩個js都require('jquery')
var entry_map = {
  'index': './public/index/index.js',
  'list': './public/list/list.js'
}
 new webpack.optimize.CommonsChunkPlugin({
      name: 'commons',
      filename: 'commons.js'
 })

使用了插件后立刻發(fā)現(xiàn)dist目錄下生成了commons.js文件。
commons.js里會定義一個webpackJsonp函數(shù)速警。這是dist/index.js也發(fā)生了變化叹誉。整個js會用webpackJsonp包裹起來
commonsChunkPlugin 用法

var entry_map = {
  'index': './public/index/index.js',
  'list': './public/list/list.js',
  'common': ['jquery', 'underscore', '']
}

providePlugin

用途:想在所有模塊中不用require就引用某個模塊
這也個是webpack內(nèi)置插件,我們常用的react, jquery, underscore等常常會配置在這里:

new webpack.ProvidePlugin({
                $: 'jquery',
                jQuery: 'jquery',
                _: 'underscore',
                smallnote: 'smallnote',
                React: 'react',
                ReactDOM: 'react-dom'
            }),

更多插件使用持續(xù)更新中~

References

http://www.reibang.com/p/e52550354142
http://webpackdoc.com/loader.html
https://webpack.toobug.net/zh-cn/
https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闷旧,一起剝皮案震驚了整個濱河市长豁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忙灼,老刑警劉巖匠襟,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異该园,居然都是意外死亡酸舍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門里初,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啃勉,“玉大人,你說我怎么就攤上這事双妨』床” “怎么了叮阅?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泣特。 經(jīng)常有香客問我浩姥,道長,這世上最難降的妖魔是什么状您? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任勒叠,我火速辦了婚禮,結(jié)果婚禮上膏孟,老公的妹妹穿的比我還像新娘眯分。我一直安慰自己,他們只是感情好骆莹,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布颗搂。 她就那樣靜靜地躺著,像睡著了一般幕垦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傅联,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天先改,我揣著相機與錄音,去河邊找鬼蒸走。 笑死仇奶,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的比驻。 我是一名探鬼主播该溯,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼别惦!你這毒婦竟也來了狈茉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤掸掸,失蹤者是張志新(化名)和其女友劉穎氯庆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扰付,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡堤撵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羽莺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片实昨。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盐固,靈堂內(nèi)的尸體忽然破棺而出荒给,到底是詐尸還是另有隱情丈挟,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布锐墙,位于F島的核電站礁哄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溪北。R本人自食惡果不足惜桐绒,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望之拨。 院中可真熱鬧茉继,春花似錦、人聲如沸蚀乔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吉挣。三九已至派撕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睬魂,已是汗流浹背终吼。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氯哮,地道東北人际跪。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像喉钢,于是被迫代替她去往敵國和親姆打。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章评抚,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一伯复、webpack介紹 1慨代、由來 ...
    it筱竹閱讀 11,064評論 0 21
  • GitChat技術(shù)雜談 前言 本文較長,為了節(jié)省你的閱讀時間啸如,在文前列寫作思路如下: 什么是 webpack侍匙,它要...
    蕭玄辭閱讀 12,681評論 7 110
  • webpack 介紹 webpack 是什么 為什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert閱讀 6,460評論 2 71
  • 剛完成一個基于React+Webpack的項目,漸漸地熟悉了Webpack的一些配置,開發(fā)過程中用到了不少Webp...
    清曉凝露閱讀 6,884評論 0 8
  • 一想暗、什么是webpack:webpack是一款模塊加載兼打包工具妇汗,它可以將js、jsx说莫、coffee杨箭、樣式sass...
    冰_心閱讀 2,004評論 0 3