webpack is a module bundler.
  • 是一个模块管理器
  • webpack可以管理模块的依赖关系,并产生可以替代这些模块的静态代码
 

 
已有方案 V.S. 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)转移:当编译所有模块时:将模块集合划分为多个小一些的模块组。
 

其他资源依赖管理支持:
  • 资源
    • 样式,图片,webfonts,html模板等
    • coffeescript,less样式表,jade模板,i18n文件
  • 解决方案: Using loaders 和 Loaders
 

静态分析:
  • 当编译全部模块的时候,静态分析系统会尝试找到对应依赖
  • 现状:通常该系统只能找到没有表达式的简单依赖,但是表达式方式确是很常见的require("./template/" + templateName + ".jade")
  • 解决方案:智能解析器允许大部分的已有代码正常运行,即使开发者做了什么奇怪的事情,解析器也会找到兼容性最好的解决方案。

以上内容翻译整理自 http://webpack.github.io/docs/motivation.html

webpack模块依赖管理介绍的更多相关文章

  1. javascript 模块依赖管理的本质

    模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...

  2. 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定

    前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...

  3. mvc-6依赖管理

    CommonJS CommonJS规范,主要解决命名空间管理模块和用一套标准的编程模式来加载模块: 很快成为了JavaScript模块写法的事实标准: 它包含IO接口,底层的套接字流,以及单元测试等标 ...

  4. maven冲突管理及依赖管理实践

    1.“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突 Maven采用“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突,即如果一个项目最终 ...

  5. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  6. webpack对多个模块依赖进行打包

    [ webpack3.0.0刚刚出来  所以文章是跟着低版本 教程 操作熟悉  结果好多对不上喔] 七:webpack对多个模块依赖进行打包 通过一刚开始我们了解到 webpack支持commonJS ...

  7. webpack中多模块依赖

    多模块依赖 刚才的例子,我们仅仅是跑通了webpack通过entry.js入口文件进行打包的例子.下面我们就来看一下它是否真的支持CommonJs和AMD两种模块机制呢?下面我们新建多几个js文件吧! ...

  8. Maven多模块项目依赖管理

    Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...

  9. webpack模块解析

    前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...

随机推荐

  1. 局域网内利用gitlab,jenkins自动生成gitbook并发布(nginx)

    安装了GitBook,内网使用,没法用上gitbook的网页. 用gitbook serve只能展示一本书,而且也不利于长期维护. 于是使用gitlab,jenkins,和nginx配合gitbook ...

  2. Spring中Bean的作用域

    1.在Spring的早期版本中,仅有两个作用域:singleton和prototype,前者表示Bean以单例的方式存在:后者表示每次从容器中调用Bean时,都会返回一个新的实例 2.Spring 2 ...

  3. 浏览器版本不支持页面示例 supper.html

    关键点在于<html>标签和js.<!--[if lt IE 10]>的配合 使用360浏览器兼容模式下查看:http://runjs.cn/code <!DOCTYPE ...

  4. 使用PowerShell读取SharePoint里列表的内容

    1. 在https://www.microsoft.com/en-us/download/details.aspx?id=42038这里下载SharePoint Online Client Compo ...

  5. 简单的行为控制管理方法,自动登录,session定时验证码过期

    代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 比如 //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分 ...

  6. .net core 1.0 中的asp.net identity 的基本使用 序言

    2016年6月底,微软发不了vs2015 up3,在这个版本中,微软做了一些改变,本人目前也尚在学习使用之中,现把学习和使用的心得写出来,错误之处请大家指正. 开发环境:vs2015 UP3   项目 ...

  7. Xamarin.Android Binding

    0.要绑定的jar库,需要保证编译jar使用的jdk版本,与绑定时xamarin使用的jdk版本一致. 查看编译jar的jdk版本的方法:jar解压后,a.看MANIFEST.MF  b. javap ...

  8. ubuntu与登录有关的log配置信息

    1. 所有sudo, sshd, sftp登录的信息都在auth.log中. 2. pam的配置是在/etc/pam.conf与/etc/pam.d中,在文件夹pam.d对cron, sudo,ssh ...

  9. OC中的字典

    // ********************不可变最字典***************** /* NSDictionary * dic = [NSDictionary dictionaryWithO ...

  10. (转)SVN服务器搭建和使用(三)

    接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态, ...