为什么会考虑模块?

  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 往右一点之 “模块这个东西”的更多相关文章

  1. webpack 往右一点之 “你好,初次见面”

    webpack  模块打包器 模块化工具的目标: 将依赖树拆分成按需加载的块 初始化加载的耗时尽量少 各种静态资源都可以视作模块 将第三方库整合成模块 自定义打包逻辑 适合大项目

  2. webpack打包之无依赖模块

    一.入口文件main.js // main.js console.log('webpack'); 二.出口文件bundle.js 1.浏览代码 2.本质 // 实际就是一个自执行函数 (functio ...

  3. Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件

    Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...

  4. 记录一下webpack好用的node模块

    postcss-loader autoprefixer: 自动添加css前缀 css-loader: 能在js文件中导入css(配合React比较好,我猜) style-loader: 将所有的计算后 ...

  5. webpack 代码分割一点事

    webpack 俨然已经成为前端最主流的构建工具,其功能多种多样,我们今天就来分析下关于代码分割这部分的一点事,并在最后讲述如何实现在webpack编译出的代码里手动添加一个异步chunk. 什么是c ...

  6. .4-浅析webpack源码之convert-argv模块

    上一节看了一眼预编译的总体代码,这一节分析convert-argv模块. 这个模块主要是对命令参数的解析,也是yargs框架的核心用处. 生成默认配置文件名数组 module.exports = fu ...

  7. .15-浅析webpack源码之WebpackOptionsApply模块-plugin事件流总览

    总体过了一下后面的流程,发现Compiler模块确实不适合单独讲解,这里继续讲解后面的代码: compiler.options = new WebpackOptionsApply().process( ...

  8. .7-浅析webpack源码之WebpackOptionsDefaulter模块

    WebpackOptionsDefaulter模块 通过参数检测后,会根据单/多配置进行处理,本文基于单配置,所以会进行到如下代码: if (Array.isArray(options)) { com ...

  9. .6-浅析webpack源码之validateSchema模块

    validateSchema模块 首先来看错误检测: const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchem ...

随机推荐

  1. this其实是js的一个对象谁调用它它就指向谁

    本人看了一下,感觉对this解释的有点复杂了,因此,本人在此给this一个简单易于理解的定义. 因为上面计算出来的结果不符合我们的习惯,并且负值在计算的时候会影响正确性,现在我们给这个结果加上180 ...

  2. android中加载的html获取的宽高不正确

    wap页面使用 js库是zepto,按照惯例在$(function(){})中,来获取当前可视区的宽高,但得到的宽高却与预想的相差十万八千里. 原本android手机的浏览器设定的宽高基本是360*6 ...

  3. applicationCache对象

    applicationCache对象代表了本地缓存,可以在js中进行一些操作.可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存.applicationCache.addEventLi ...

  4. 为什么有禁用Mac系统的Spotlight的需求:

    一.为什么有禁用Mac系统的Spotlight的需求: 有的网友由于使用的是相对较老的苹果电脑在运行较新的系统:也有可能你是个速度控,受不了偶尔卡卡顿顿的操作,必须将所有导致卡顿的原因全部消除:也有可 ...

  5. 鼠标光标聚焦到可编辑div的最末尾

    <p> <div id='text' contenteditable=true style='width:100px;height:100px;border:1px #ccc;'&g ...

  6. unity 内存中切割图片

    一般的说我们切割图片是将一张图片资源切割成更小的图片资源,也就是说在资源上就进行了切割,比如ugui上的切割方法. 如果我们有一些情况比如做拼图,可能让玩家自己选择自己的生活照作为拼图的原图. 那么我 ...

  7. C# WebApi 请求方式Post,返回Response

    1.[FromBody]属性只能用在一个参数上,当Body中有多个参数要定义类型.一个参数的时候 key="",value="123",key为空才能取到值. ...

  8. c# equals与==

    对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true.对于 string ...

  9. jquery之css操作

    HTML示例代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. Zookeeper基本配置

    前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ...