美文网首页
JS模块化

JS模块化

作者: Quilljou | 来源:发表于2017-07-29 19:19 被阅读48次

这是一个关于JS模块化的扫盲贴。

列举一下我们会遇到的一些概念:

AMD,CMD,CommonJs,同步加载,异步加载,module.exports,ES6模块,require,define

我们的任务就是消除这些盲点。

CommonJs是同步加载的,所以适用于服务端node。

const moment = require('moment');
new moment();

在一个项目中,模块加载一次后就会被缓存,所以完全不用担心一个模块被多个模块引用而导致重复加载模块。

CMD和AMD是浏览器端的规范,因为他们都是异步的。

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。

对于依赖的模块,AMD 是提前执行,CMD 是延迟执行

CMD 推崇 as lazy as possible.
CMD 推崇依赖就近,AMD 推崇依赖前置。

CMD

导出

define(function(require, exports) {
  exports.each = function (arr) {
    // 实现代码
  };

  exports.log = function (str) {
    // 实现代码
  };
});

导入

define(function(require, exports) {
  var util = require('./util.js');

  exports.init = function() {
    // 实现代码
  };
});

AMD

定义入口文件

<script src="js/require.js" data-main="js/main"></script>
require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){
    // some code here
});

require.js假定这三个模块与main.js在同一个目录,文件名分别为jquery.js,underscore.js和backbone.js,然后自动加载。

使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。

require.config({
    paths: {
      "jquery": "jquery.min",
      "underscore": "underscore.min",
      "backbone": "backbone.min"
    }
  });

模块导出

define(['myLib'], function(myLib){
    function foo(){
      myLib.doSomething();
    }
    return {
      foo : foo
    };
  });

模块导入

// main.js
  require(['math'], function (math){
    alert(math.add(1,1));
  });

ES6在语法层面上实现了模块。使用的是 export和import关键字。上面的这些模块polyfill都将成为历史了。

相关文章

  • 模块化开发

    js模块化开发vue模块化开发

  • Javascript 模块化

    Javascript 模块化发展的历史精读 js 模块化发展直接定义依赖 (1999): 由于当时 js 文件非常...

  • js模块化规范

    title: js模块化date: 2019-01-30 17:49:22tags: js 1.无模块化 缺点:1...

  • js 模块化

    尚硅谷_JS模块化 笔记

  • 06Vue的前端工程化

    Vue的前端工程化 一 模块化规范 1.1模块化规范举例 浏览器端JS模块化规范:AMD,CMD 服务器端JS模块...

  • 模块化开发

    什么是模块化? 模块化就是讲js文件按照功能分离,根据需求引入不同的文件中。源于服务器端。 js模块化方案有AMD...

  • 前端模块化

    在学node.js, 实际上就是基于common.js开发的,所以了解了一下模块化开发。 JS的模块化初衷和所有语...

  • 04-webpack核心基础-ES6模块化

    一、模块化概述 在ES6出现之前,JS不像其他语言拥有“模块化”这一概念,于是为了支持JS模块化我们使用类、立即执...

  • 前端javascript模块化

    JavaScript js 模块化 关于js模块化的理解写法一 写法二 写法三 写发四(不推荐) 写发五 (错误写...

  • 做了这么久的前端开发,听过Css模块化开发么?

    说起前端模块化开发,大部分人可能只会想到js模块化开发吧,网上也确实有各种各样的js模块化方法,但是鲜有谈论Css...

网友评论

      本文标题:JS模块化

      本文链接:https://www.haomeiwen.com/subject/dspclxtx.html