最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

webpack學(xué)習(xí)筆記之代碼分割和按需加載的實例詳解

 更新時間:2017年07月20日 14:38:02   作者:HellowWorldZz  
本篇文章主要介紹了webpack學(xué)習(xí)筆記之代碼分割和按需加載的實例詳解,具有一定的參考價值,有興趣的可以了解一下

本文介紹了webpack學(xué)習(xí)筆記之代碼分割和按需加載的實例詳解,分享給大家,也給自己留個筆記

為什么需要代碼分割和按需加載

代碼分割就是我們根據(jù)實際業(yè)務(wù)需求將代碼進(jìn)行分割,然后在合適的時候在將其加載進(jìn)入文檔中。

舉個簡單的例子:

1.一個HTML中存在一個按鈕

2.點擊按鈕出現(xiàn)一個包著圖片的div

3.點擊關(guān)閉按鈕圖片消失

Demo目錄:

這里寫圖片描述

一.當(dāng)未點擊按鈕時瀏覽器只加載了對入口文件打包后的js

二.點擊按鈕會對組件進(jìn)行異步加載


這個clichunk就是我們打包好的click組件,包括相應(yīng)的JS邏輯html和css

例子源碼記錄

1.編輯入口文件

window.onload=function(){
     var _cs=require('./index.css');
     var $=require('jquery');

     $('#_click').on('click',function(){
       require.ensure([],function(require){
         var _click=require('./_clickWindow.js');
         if(!_clickEvent){
           console.log(_click);
           var _clickEvent=_click._clicks;
         }
         new _clickEvent();
       },'cli')
     });
};

webpack將一切視為模塊,CSS,js,html,JSX等等。

var _cs=require('./index.css');

引入對應(yīng)的css模塊。這就需要我們安裝css-loder和style-loader。

這里寫圖片描述 

–save -dev的目的是為了在package.json文件的devDependencies寫入依賴項。

點擊按鈕時,加載定義好的組件,當(dāng)加載完成后執(zhí)行組件里的方法。

首先要學(xué)習(xí)require.ensure方法:

在commonjs中有一個Modules/Async/A規(guī)范,里面定義了require.ensure語法。webpack實現(xiàn)了它,作用是可以在打包的時候進(jìn)行代碼分片,并異步加載分片后的代碼。用法如下:

require.ensure([], function(require){
  var list = require('./list');
  list.show();
});

中括號內(nèi)寫入依賴項

此時list.js會被打包成一個單獨的chunk文件,大概長這樣:

1.fb874860b35831bc96a8.js。

可讀性比較差,此時就需要加入第三個參數(shù)

require.ensure([], function(require){
  var list = require('./list');
  list.show();
}, 'list');

此時打包后的js文件名為

list.fb874860b35831bc96a8.js

也可以傳入像”question/list”這樣帶層級的名字,這樣webpack會按照層級給你創(chuàng)建文件夾。

require.ensure([], function(require){
  var list = require('./list');
  list.show();
  var edit = require('./edit');
  edit.display();
}, 'list_and_edit');

同時引入兩個文件,webpack會將這兩個文件和寫入的依賴項打包在一起,如果你不希望打包在一起,只能寫兩require.ensure分別引用這兩個文件。

require.ensure([‘./a.js'], function(require){
  var list = require('./list');
  list.show();
});

require.ensure([‘./a.js'], function(require){
  var b = require('./b');
  b.show();
});

如果list和b同時以來a.js那么在打包時a.js會被重復(fù)打包兩次,如果想解決這樣的問題,那么

require.ensure([‘./a.js'], function(require){
  var list = require('./list');
  list.show();
},'list-b');

require.ensure([‘./a.js'], function(require){
  var b = require('./b');
  b.show();
},'list-b');

此時這三個文件就會被打包在一起。

2.組件js

(function(){
  var _html=require('./_clickHtml.html');
  var $=require('jquery');

  function ClickWindow(){
   this.div=$('body').append(_html);
   $('#_tip').append('<img src="./timg.jpg">');
   this.init();
  }
  ClickWindow.prototype.init=function(){
   $('#_tip').append('<button>關(guān)閉</button>')
     .on('click',function(){
       $('img').animate({'width':0},300);
     });
  };

  module.exports._clicks=ClickWindow;
})();

引入寫好的html同上需要下載html-loader

3.配置文件

var path=require('path');
module.exports={
 entry:__dirname+'/index.js',
 output:{
   path: __dirname,
   filename:'[name]bundle.js',
   chunkFilename:'[name]chunk.js'
 },
  module: {
      loaders: [  //加載器
       {test: /\.css$/, loader: "style!css" },
       {test: /\.html$/, loader: "html" },
       {test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}
      ]
  }
};

filename:'[name]bundle.js',

[name]指向入口文件的name

chunkFilename:'[name]chunk.js'

[name]指向require.ensure定義的第三個參數(shù)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

广水市| 嵩明县| 内丘县| 兰州市| 逊克县| 宣化县| 敦煌市| 保山市| 东乌| 岑巩县| 富民县| 玛曲县| 吴堡县| 颍上县| 三穗县| 张掖市| 辽阳市| 嵊州市| 望奎县| 呼和浩特市| 沂源县| 郁南县| 盐津县| 红原县| 鄱阳县| 澄江县| 濉溪县| 岳西县| 银川市| 临清市| 安新县| 田林县| 通江县| 青田县| 昌平区| 炉霍县| 宁安市| 昌江| 家居| 嫩江县| 北京市|