详解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 URL参数的拼接方法比较
Feb 15 Javascript
基于jquery库的tab新形式使用
Nov 16 Javascript
JavaScript小技巧整理篇(非常全)
Jan 26 Javascript
AngularJS 2.0新特性有哪些
Feb 18 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
May 01 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
js脚本实现数据去重
2014/11/27 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python用requests实现http请求代码实例
2019/10/31 Python
python如何快速生成时间戳
2020/07/21 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
文明餐桌活动方案
2014/02/11 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
2014年学生会工作总结
2014/11/07 职场文书
导游词之广西漓江
2019/11/02 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
浅谈PHP7中的一些小技巧
2021/05/29 PHP
能让Python提速超40倍的神器Cython详解
2021/06/24 Python