美文网首页
js模块化规范

js模块化规范

作者: 希染丶 | 来源:发表于2019-05-27 10:56 被阅读0次

title: js模块化
date: 2019-01-30 17:49:22
tags: js


1.无模块化

<script src="jquery.js"></script>
<script src="jquery_scroller.js"></script>

缺点:1.污染全局作用域 2.依赖关系不明显

2. commonJS规范

最初应用于服务端
前端webpack也对CommonJS原生支持

每一个文件就是一个模块,内部定义的变量属于这个模块,不会对外暴露,不会污染全局。

核心思想:通过require同步加载所要依赖的其他模块,通过exports 或者module.exports 来导出需要暴露的接口

module代表这个模块,exports代表要暴露的接口,默认顶部有一句代码 exports = module.exports

所以不能直接给exports赋值, 如 number/function等

// a.js
var x = 5;
var addX = function (value) {
  return value + x;
};
module.exports.x = x;
module.exports.addX = addX;

// 引用
var a = require('./a.js');
console.log(a.x); // 5
console.log(a.addX(1)); // 6

优点:commonJS率先在服务端完成模块化,解决了依赖全局变量污染的问题
缺点:由于commonJS是同步加载模块,在浏览器端不适用。

3. AMD规范

AMD规范则是非同步加载模块,允许指定回调函数.AMD规范的实现:require.js
AMD标准定义了两个API

1.require([module],callback)
2.define(id,[depends],callback)

即通过define定义模块,require加载模块。且require支持commonJS的模块导出方式、

定义alert模块:

define(function () {
    var alertName = function (str) {
      alert("I am " + str);
    }
    var alertAge = function (num) {
      alert("I am " + num + " years old");
    }
    return {
      alertName: alertName,
      alertAge: alertAge
    };
});

引入模块

require(['alert'], function (alert) {
  alert.alertName('JohnZhu');
  alert.alertAge(21);
});

在使用requireJS时候,必须提前加载所有的依赖,然后才能使用

优点:适合在浏览器端异步加载模块,可以并行加载多个模块
缺点:提高了开发成本,并且不能按需加载,必须提前加载完所有依赖

4.CMD规范

CMD规范是阿里的玉伯提出来的,实现js库为sea.js。 它和requirejs非常类似,即一个js文件就是一个模块,但是CMD的加载方式更加优秀,是通过按需加载的方式,而不是必须在模块开始就加载所有的依赖。如下:

define(function(require, exports, module) {
  var $ = require('jquery');
  var Spinning = require('./spinning');
  exports.doSomething = ...
  module.exports = ...
})

优点: 浏览器端模块加载,按需加载,依赖就近
缺点: 依赖SPM打包,模块的加载逻辑偏重

AMD和CMD区别:
前者对依赖提前执行,后者延迟执行。
前者推崇依赖前置,后者推崇依赖就近,即在需要时候某个模块在require

// AMD
define(['./a', './b'], function(a, b) {  // 依赖必须一开始就写好  
   a.doSomething()    
   // 此处略去 100 行    
   b.doSomething()    
   ...
});
// CMD
define(function(require, exports, module) {
   var a = require('./a')   
   a.doSomething()   
   // 此处略去 100 行   
   var b = require('./b') 
   // 依赖可以就近书写   
   b.doSomething()
   // ... 
});

5.ES6模块化

之前的模块化都是社区自己实现的,只是得到大家的认可和广泛使用,而ES6是官方推出的真正规范的模块化方案。
使用import引入模块,通过export导出模块。
目前ES6在浏览器支持性不高,通过babel将import编译为require

import store from '../store/index'
import {mapState, mapMutations, mapActions} from 'vuex'
import axios from '../assets/js/request'
import util from '../utils/js/util.js'

export default {
  created () {
  this.getClassify(); 
  this.RESET_VALUE();
  console.log('created' ,new Date().getTime());
}

相关文章

  • 06Vue的前端工程化

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

  • Webpack原理-从前端模块化开始

    当前主流 JS 模块化方案 CommonJS 规范,nodejs 实现的规范 AMD 规范,requirejs 实...

  • js模块化

    js的模块化大致分为4种规范 amd cmd commonjs 和es6模块化 1.amd规范 amd规范又叫异步...

  • module模块化

    模块化规范 CommonJS : node.js require('')... AMD : require.j...

  • js模块化规范

    一、js模块化1、模块化规范: script CommonJS AMD CMD ES6 modules 2、scr...

  • 前端工程化的一些理解

    一、模块化 主要是js模块化,可以使用CommonJS、AMD、CMD等模块化规范,其中的区别是CommonJS对...

  • 模块化相关知识

    CMJ:node环境中的模块化规范。AMD:在浏览器端运行的JS模块化规范。UMD:CMJ和AMD的集成,会依次判...

  • 一次性搞懂 CommonJS, AMD, CMD 等模块化规范

    1 常见的模块化规范 CommonJs (Node.js) AMD (RequireJS) CMD (SeaJS)...

  • nodejs基础三(模块与包管理工具)

    一.Node.js 的模块 与 Commonjs 规范 js的天生缺陷——缺少模块化管理机制·表现>> JS中容易...

  • 模块化

    - 模块化 -AMD-CMD规范- requireJS实践- r.js打包工具使用 1、为什么要使用模块化?###...

网友评论

      本文标题:js模块化规范

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