详解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获得内容和属性方法及示例
Dec 02 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
JavaScript实现文字与图片拖拽效果的方法
Feb 16 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
JavaScript SHA512&SHA256加密算法详解
Aug 11 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
Dec 02 Javascript
JavaScript严格模式详解
Jan 16 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
微信小程序CSS3动画下拉菜单效果
Nov 04 Javascript
JavaScript类的继承多种实现方法
May 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
PHP 数字左侧自动补0
2008/03/31 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
python连接mongodb集群方法详解
2020/02/13 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
php优化查询foreach代码实例讲解
2021/03/24 PHP
个人求职信范文分享
2014/01/06 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
单位单身证明样本
2014/10/11 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL