webpack模块依赖管理介绍
- 是一个模块管理器
- webpack可以管理模块的依赖关系,并产生可以替代这些模块的静态代码
- <script>:
<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libaryA.js"></script>
<script src="module3.js"></script>- 冲突,加载顺序,依赖,长且难于管理
- commonjs(同步):
require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;- 网络同步请求块级调用不适用,多模块无法并行调用
- 实践:nodejs,browerify,modules-webmake(编译成为一个bundle),wrep(客户端)
- AMD(异步):
require(["module", "../file"], function(module, file) { /* ... */ });
define("mymodule", ["dep1", "dep2"], function(d1, d2) {
return someExportedValue;
});- 适用于网络异步模型,多模块并行加载
- 代码过重难于读写,更像是为了解决问题的变通方法
- ES6 MODULES:
import "jquery";
export function doStuff() {}
module "localModule" {}- 易于静态分析,确认为未来的ES标准
- 原生浏览器支持需要时间,仅有很少模块采用这种形式
- webpack:
- 让开发者选择模块风格,允许已有代码正常运行,易于添加用户模块类型
- 模块需要在客户端运行,所以模块需要从服务端转移到浏览器端
- 两种极端的转移方法
- 一个请求一个模块
- 优点:仅请求需要的模块
- 缺点:多模块请求次数过多
- 缺点: 请求延时导致app打开过慢
- 一个请求所有模块
- 优点:请求次数减少,请求延时减少
- 缺点:不能够按需请求
- 模块组(chunked)转移:当编译所有模块时:将模块集合划分为多个小一些的模块组。
- 通过这种方法我们得到多个更小的请求,初始化时不需要的模块组可以按需请求,初始化请求不在包含完整模块代码并且变得更小了。
- 模块组的划分(代码分割)取决于开发者的需求并且是可选的。
- 大量代码库成为可能。
- GOOGLE’S GWT: http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html
- 更多代码分割资料: http://webpack.github.io/docs/code-splitting.html
- 资源
- 样式,图片,webfonts,html模板等
- coffeescript,less样式表,jade模板,i18n文件
- 解决方案: Using loaders 和 Loaders
- 当编译全部模块的时候,静态分析系统会尝试找到对应依赖
- 现状:通常该系统只能找到没有表达式的简单依赖,但是表达式方式确是很常见的require("./template/" + templateName + ".jade")
- 解决方案:智能解析器允许大部分的已有代码正常运行,即使开发者做了什么奇怪的事情,解析器也会找到兼容性最好的解决方案。
以上内容翻译整理自 http://webpack.github.io/docs/motivation.html
webpack模块依赖管理介绍的更多相关文章
- javascript 模块依赖管理的本质
模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...
- 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...
- mvc-6依赖管理
CommonJS CommonJS规范,主要解决命名空间管理模块和用一套标准的编程模式来加载模块: 很快成为了JavaScript模块写法的事实标准: 它包含IO接口,底层的套接字流,以及单元测试等标 ...
- maven冲突管理及依赖管理实践
1.“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突 Maven采用“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突,即如果一个项目最终 ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- webpack对多个模块依赖进行打包
[ webpack3.0.0刚刚出来 所以文章是跟着低版本 教程 操作熟悉 结果好多对不上喔] 七:webpack对多个模块依赖进行打包 通过一刚开始我们了解到 webpack支持commonJS ...
- webpack中多模块依赖
多模块依赖 刚才的例子,我们仅仅是跑通了webpack通过entry.js入口文件进行打包的例子.下面我们就来看一下它是否真的支持CommonJs和AMD两种模块机制呢?下面我们新建多几个js文件吧! ...
- Maven多模块项目依赖管理
Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...
随机推荐
- Vuforia判断当识别追踪的对象
方法一,如果有多个识别对象,在Update中循环识别对象数组,获取TrackableBehaviour组件 foreach (var item in trackObjects) { var mTrac ...
- Java并发编程底层实现原理 - volatile
Java语言规范第三版中对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致性的更新,线程应该确保通过排他锁 单独获得这个变量. volatile有时候 ...
- 将List下载到本地保存为Excel
直接附上代码 /// <summary> /// 将List保存为Excel /// </summary> /// <typeparam name="T&quo ...
- iOS开发之CocoaLumberjack
Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一.它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info.debug.war ...
- FAT32文件系统
- Tomcat常见问题汇总
1.在服务器上一定要开启-server参数 #直接在一堆注释下添加即可 #即是在 # OS specific support.注释之前 JAVA_OPTS= -server 2.tomcat启动很慢 ...
- rabbitmq之back queue草稿
申请队列rabbit_reader在收到消息后处理数据帧时,如果channel id不是0(0代表连接),则认为是channel相关方法. handle_frame(Type, Channel, Pa ...
- 关于IOS的唯一标识总结
APPLE官方宣布在2013年5月后,使用 UUID的APP将不能通过审核,同时APPLE增加了广告标识符(IDFA)和IDFV. 1.有什么方法获取UUID? //CFUUID CFUUIDRef ...
- 将时间转换为xxx天前 xxx..前
<?php echo (time_fitle('2016-08-17 17:00:00')); function time_fitle($date){ date_default_timezone ...
- 【Android测试】UI自动化代码优化之路(临时发布, 随时删除)
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...