详解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 相关文章推荐
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
Aug 13 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
全面了解JavaScript对象进阶
Jul 19 Javascript
webpack搭建vue 项目的步骤
Dec 27 Javascript
用p5.js制作烟花特效的示例代码
Mar 21 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
mac上配置Android环境变量的方法
Jul 08 Javascript
js使用文件流下载csv文件的实现方法
Jul 15 Javascript
js实现双人五子棋小游戏
May 28 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
php Static关键字实用方法
2010/06/04 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php实现的农历算法实例
2015/08/11 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
html下载本地
2006/06/19 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
python获取图片颜色信息的方法
2015/03/18 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
最新党员思想汇报
2014/01/01 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
合伙购房协议样本
2014/10/06 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS