webpack 往右一点之 “模块这个东西”
为什么会考虑模块?
webapp,页面初始化和使用过程中会加载越来越多的javascript代码
--- 给前端的开发流程和资源组织带来挑战
---前端需要模块系统
模块系统是干什么的呢?
模块的定义
依赖
导出
现有的模块规范有哪些?
commonjs
例子: 服务器端的nodejs
思想: 允许模块通过require方法来同步加载所要依赖的其他模块,然后通过exports或module。exports来导出需要暴漏的接口
缺点:不能非阻塞并行加载多个模块
amd
主要接口: define(id?,dependencies?,factory)对于依赖的模块提前执行
缺点:代码的阅读和书写比较困难,不通用
优点:并行加载多个模块,适合在浏览器中异步加载模块
例子: curl,requirejs
cmd
和amd很相似,尽量保持简单,兼容性好
define(function(require,exports,module){
var $ = require('jquery');
exports.xxx
module.exports=
});
模块的加载逻辑很重?
例子:seajs
es6模块
思想: 静态化,在编译时就能确定模块的依赖关系,以及输入和输出的变量
import ‘jquery’
export function(){}
module “localmodule”{}
缺点: 兼容性
例子:babel
理想的模块系统是怎么样的呢?
1. 可以兼容多种模块风格
2. css、图片、字体等也需要模块化
资源会以各种方言的形式存在,比如coffeescript、less、sass、众多的模版库等
如何做到让require能加载各种资源?
静态分析
在编译的时候,对整个代码进行静态分析,分析出各个模块的类型和他们依赖关系,然后将不同类型
的模块提交给适配的加载器来处理
模块的加载?
极端模式:每个模块文件单独加载
把所有模块打包成一个文件然后只请求一次
分块传输模式:按需进行懒加载
需要一个对整个代码库中的模块进行静态分析、编译打包的过程
webpack 往右一点之 “模块这个东西”的更多相关文章
- webpack 往右一点之 “你好,初次见面”
webpack 模块打包器 模块化工具的目标: 将依赖树拆分成按需加载的块 初始化加载的耗时尽量少 各种静态资源都可以视作模块 将第三方库整合成模块 自定义打包逻辑 适合大项目
- webpack打包之无依赖模块
一.入口文件main.js // main.js console.log('webpack'); 二.出口文件bundle.js 1.浏览代码 2.本质 // 实际就是一个自执行函数 (functio ...
- Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件
Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...
- 记录一下webpack好用的node模块
postcss-loader autoprefixer: 自动添加css前缀 css-loader: 能在js文件中导入css(配合React比较好,我猜) style-loader: 将所有的计算后 ...
- webpack 代码分割一点事
webpack 俨然已经成为前端最主流的构建工具,其功能多种多样,我们今天就来分析下关于代码分割这部分的一点事,并在最后讲述如何实现在webpack编译出的代码里手动添加一个异步chunk. 什么是c ...
- .4-浅析webpack源码之convert-argv模块
上一节看了一眼预编译的总体代码,这一节分析convert-argv模块. 这个模块主要是对命令参数的解析,也是yargs框架的核心用处. 生成默认配置文件名数组 module.exports = fu ...
- .15-浅析webpack源码之WebpackOptionsApply模块-plugin事件流总览
总体过了一下后面的流程,发现Compiler模块确实不适合单独讲解,这里继续讲解后面的代码: compiler.options = new WebpackOptionsApply().process( ...
- .7-浅析webpack源码之WebpackOptionsDefaulter模块
WebpackOptionsDefaulter模块 通过参数检测后,会根据单/多配置进行处理,本文基于单配置,所以会进行到如下代码: if (Array.isArray(options)) { com ...
- .6-浅析webpack源码之validateSchema模块
validateSchema模块 首先来看错误检测: const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchem ...
随机推荐
- 计算机网络自学之路-----IP协议(3)
前面一期说到了IP层的IP协议跟ARP协议,因为IPV4协议自身有些不足的地方,为了弥补这些不足,又引入了一些别的协议.觉得这种弥补方式治标不治本~~ 1)ICMP网络控制报文协议 2)CIDR无类域 ...
- ubuntu 配置vim(vimrc)
打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容," 这个符号为注释,后面内 ...
- JS 获取地址栏三级域名(改进版)
<script type="text/javascript"> str="http://yl.www.tyg.com/index.php"; str ...
- Interpolation in MATLAB
Mathematics One-Dimensional Interpolation There are two kinds of one-dimensional interpolation i ...
- C++命名空间问题
名称空间支持是一项c++特性,是用来解决在编写大型程序中不同文件(厂商)中相同变量名问题. 例如:有两个已经封装好的产品(类)中同时包含一个名为wanda()的函数,为了能够准确调用其中一个wand ...
- Pads怎么设置某一网络的线宽
在利用pads工具进行layout时,由于某一条网络可能会有很多条走线,而走线的宽度也相同,如果一条条设置,会很麻烦,所以pads中可以直接设置某一网络的线宽,避免繁琐的工作. 如下所示同一网络的走线 ...
- XMLHttpRequest
XMLHttpRequest对象的方法 abort() 取消当前所发出的请求 getAllResponseHeaders() 取得所有的HTTP头信息 getResponseHeader() 取得一个 ...
- asp.net4.0在Global中的Application_Start 中直接或间接使用 HttpUtility.UrlEncode等出现异常Response is not available in this context的解决方法
HttpUtility.HtmlEncode HttpUtility.HtmlDecode HttpUtility.UrlEncode HttpUtility.UrlDecode 也会出现此异常. 这 ...
- xcode8让真机测试支持ios8.0以下版本
xcode8支持ios8以下真机测试方法: 1.应用程序-xcode 显示包内容-Contents-Developer-Platforms-iPhoneOS.platform-DeviceSuppor ...
- 最新版STS因为JDK版本太低无法启动的解决办法
-startup plugins/org.eclipse.equinox.launcher_1..jar --launcher.library plugins/org.eclipse.equinox. ...