全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

webpack学习笔记之代码分割和按需加载的实例详解

本文介绍了webpack学习笔记之代码分割和按需加载的实例详解,分享给大家,也给自己留个笔记

为什么需要代码分割和按需加载

代码分割就是我们根据实际业务需求将代码进行分割,然后在合适的时候在将其加载进入文档中。

举个简单的例子:

1.一个HTML中存在一个按钮

2.点击按钮出现一个包着图片的div

3.点击关闭按钮图片消失

Demo目录:

一.当未点击按钮时浏览器只加载了对入口文件打包后的js

二.点击按钮会对组件进行异步加载


这个clichunk就是我们打包好的click组件,包括相应的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');

引入对应的css模块。这就需要我们安装css-loder和style-loader。

 

–save -dev的目的是为了在package.json文件的devDependencies写入依赖项。

点击按钮时,加载定义好的组件,当加载完成后执行组件里的方法。

首先要学习require.ensure方法:

在commonjs中有一个Modules/Async/A规范,里面定义了require.ensure语法。webpack实现了它,作用是可以在打包的时候进行代码分片,并异步加载分片后的代码。用法如下:

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

中括号内写入依赖项

此时list.js会被打包成一个单独的chunk文件,大概长这样:

1.fb874860b35831bc96a8.js。

可读性比较差,此时就需要加入第三个参数

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

此时打包后的js文件名为

list.fb874860b35831bc96a8.js

也可以传入像”question/list”这样带层级的名字,这样webpack会按照层级给你创建文件夹。

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会被重复打包两次,如果想解决这样的问题,那么

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>关闭</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定义的第三个参数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# webpack代码分割  # webpack  # 按需加载  # 分割  # webpack优化之代码分割与公共代码提取详解  # Webpack3+React16代码分割的实现  # 加载  # 这两个  # 第三个  # 按需  # 分片  # 就会  # 给你  # 中有  # 两次  # 将其  # 这就  # 给大家  # 会对  # 时就  # 会将  # 也给  # 这三个  # 要学  # 写好  # 配置文件 


相关文章: 如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  建站主机是否属于云主机类型?  如何注册花生壳免费域名并搭建个人网站?  建站之星云端配置指南:模板选择与SEO优化一键生成  完全自定义免费建站平台:主题模板在线生成一站式服务  简历在线制作网站免费,免费下载个人简历的网站是哪些?  装修招标网站设计制作流程,装修招标流程?  如何通过多用户协作模板快速搭建高效企业网站?  如何快速重置建站主机并恢复默认配置?  网站网页制作专业公司,怎样制作自己的网页?  制作表格网站有哪些,线上表格怎么弄?  公司门户网站制作流程,华为官网怎么做?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站主机选购指南:核心配置与性价比推荐解析  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  c++怎么用jemalloc c++替换默认内存分配器【性能】  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  北京制作网站的公司,北京铁路集团官方网站?  建站之星备案是否影响网站上线时间?  如何确保西部建站助手FTP传输的安全性?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  建站之星安装需要哪些步骤及注意事项?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  C#如何序列化对象为XML XmlSerializer用法  相册网站制作软件,图片上的网址怎么复制?  股票网站制作软件,网上股票怎么开户?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  网站制作壁纸教程视频,电脑壁纸网站?  如何打造高效商业网站?建站目的决定转化率  南京网站制作费用,南京远驱官方网站?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何零成本快速生成个人自助网站?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  教学论文网站制作软件有哪些,写论文用什么软件 ?  济南企业网站制作公司,济南社保单位网上缴费步骤?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何在香港免费服务器上快速搭建网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  ,购物网站怎么盈利呢?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何快速配置高效服务器建站软件?  行程制作网站有哪些,第三方机票电子行程单怎么开?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何在腾讯云服务器上快速搭建个人网站?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  图册素材网站设计制作软件,图册的导出方式有几种?  小型网站制作HTML,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。