webpack学习笔记(代码分割,按需加载)
来源:互联网 发布:比较有名的网络女歌手 编辑:程序博客网 时间:2024/05/16 09:50
为什么需要代码分割和按需加载
代码分割就是我们根据实际业务需求将代码进行分割,然后在合适的时候在将其加载进入文档中。
举个简单的例子:
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定义的第三个参数
demo源码:git@github.com:zhtzjz/webpack-.git
*最后,希望自己写笔记的习惯可以坚持下来。*
- webpack学习笔记(代码分割,按需加载)
- webpack简单代码分割
- webpack/webpack+bundle-loader/webpack+redux code splitting(按需加载)
- webpack学习笔记 (上)
- webpack学习笔记(一)
- webpack代码分割(https://webpack.js.org/guides/code-splitting/)
- webpack学习笔记—优化缓存、合并、懒加载等
- webpack ——代码分割ensure
- webpack代码分割-使用require.ensure
- TypeScript学习笔记(三)Webpack
- webpack学习笔记
- webpack学习笔记
- webpack学习笔记<使用>
- Webpack 学习笔记
- webpack学习笔记
- webpack 学习笔记
- webpack入门学习笔记
- webpack学习笔记
- 提供android的UI体验度
- Android开发 —— apk打包流程
- 在Spark上通过BulkLoad快速将海量数据导入Hbase
- codeforces 219D 【树形DP】
- Scanner中nextLine()方法和next()方法的使用概括
- webpack学习笔记(代码分割,按需加载)
- POJ2762-Going from u to v or from v to u?(有向图强连通分量缩点)
- 2010 水仙花数
- 如何监听Android手机物理返回键
- Git 使用备忘
- Hdu-1885-Key Task [状态压缩][bfs]
- js数组中出现次数最多和第二多的元素
- python ----pyCharm(IDE)------2017.1安装
- 自定义UICollectionViewController之后如何设置布局方式