详解webpack require.ensure与require AMD的区别


Posted in Javascript onDecember 13, 2017

简介

require-ensure和require-amd的区别:

require-amd

说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调函数

语法: require(dependencies: String[], [callback: function(...)])

参数

  1. dependencies: 模块依赖数组
  2. callback: 回调函数

require-ensure

说明: require.ensure在需要的时候才下载依赖的模块,当参数指定的模块都下载下来了(下载下来的模块还没执行),便执行

参数指定的回调函数。require.ensure会创建一个chunk,且可以指定该chunk的名称,如果这个chunk名已经存在了,则将本次依赖的模块合并到已经存在的chunk中,最后这个chunk在webpack构建的时候会单独生成一个文件。

语法: require.ensure(dependencies: String[], callback: function([require]), [chunkName: String])

  1. dependencies: 依赖的模块数组
  2. callback: 回调函数,该函数调用时会传一个require参数
  3. chunkName: 模块名,用于构建时生成文件时命名使用

注意点:requi.ensure的模块只会被下载下来,不会被执行,只有在回调函数使用require(模块名)后,这个模块才会被执行。

示例

require-amd

源代码

webpack.config.amd.js

var path = require("path");
module.exports = {
  entry: "./example.amd.js",
  output: {
    path: path.join(__dirname, "amd"),
    filename: "[name].bundle.js",
    chunkFilename: "[id].chunk.js"
  }
};

example.amd.js

require(["./module1"], function(module1) {
  console.log("aaa");
  var module2 = require("./module2");
  console.log("bbb");
});

module1.js

console.log("module1");
module.exports = 1;

module2.js

console.log("module2");
module.exports = 2;

构建结果

命令行中运行webpack --config webpack.config.amd.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行amd/index.html,控制台输出:

module1
aaa
module2
bbb

require-ensure

源代码

webpack.config.ensure.js

var path = require("path");
module.exports = {
  entry: "./example.ensure.js",
  output: {
    path: path.join(__dirname, "ensure"),
    filename: "[name].bundle.js",
    chunkFilename: "[name].chunk.js"
  }
};

example.ensure.js

require.ensure(["./module1"], function(require) {
  console.log("aaa");
  var module2 = require("./module2");
  console.log("bbb");
  require("./module1");
}, 'test');

module1.js
同上

module2.js
同上

构建结果

命令行中运行webpack --config webpack.config.ensure.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行ensure/index.html,控制台输出:

aaa
module2
bbb
module1

require-ensure-chunk

源代码

webpack.config.ensure.chunk.js

var path = require("path");
module.exports = {
  entry: "./example.ensur.chunk.js",
  output: {
    path: path.join(__dirname, "ensure-chunk"),
    filename: "[name].bundle.js",
    chunkFilename: "[name].chunk.js"
  }
};

example.ensur.chunk.js

require.ensure(["./module1"], function(require) {
  console.log("aaa");
  require("./module1");
  console.log("bbb");
}, 'common');

require.ensure(["./module2"], function(require) {
  console.log("ccc");
  require("./module2");
  console.log("ddd");
}, 'common');

module1.js
同上

module2.js
同上

构建结果

命令行中运行webpack --config webpack.config.ensure.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行ensure/index.html,控制台输出:

aaa
module1
bbb
ccc
1module2
ddd

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

Javascript 相关文章推荐
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
javascript跨域的4种方法和原理详解
Apr 08 Javascript
js中substring和substr的定义和用法
May 05 Javascript
JavaScript中的console.group()函数详细介绍
Dec 29 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
浅谈javascript的Array.prototype.slice.call
Aug 31 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
Jun 22 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
vue登录路由验证的实现
Dec 13 #Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 #Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 #Javascript
vue组件中使用iframe元素的示例代码
Dec 13 #Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 #Javascript
vue实现nav导航栏的方法
Dec 13 #Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 #Javascript
You might like
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Jquery Fade用法详解
2020/11/06 jQuery
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python可迭代对象操作示例
2019/05/07 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
Jdbc数据访问技术面试题
2012/03/30 面试题
学校经典推荐信
2013/10/30 职场文书
行政文员岗位职责
2013/11/08 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
美食节策划方案
2014/05/26 职场文书
身边的榜样活动方案
2014/08/20 职场文书
个人融资协议书
2014/10/02 职场文书
高中生毕业评语
2014/12/30 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
2015年科普工作总结
2015/07/23 职场文书
大队委员竞选稿
2015/11/20 职场文书