es6

模块规范(module)

Ruby 的 require、Python 的 import、 CSS 有 @import

CommonJS规范

Node 应用由模块组成,采用 CommonJS 模块规范。

每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

如果想在多个文件分享变量,必须定义为global对象的属性。

global.warning = true;

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

require 模块

node 遵循 CommonJS 规范,requirejs 遵循 AMD ,seajs 遵循 CMD ,虽各有不同,但风格统一。


// -------- node -----------
module.exports = {
  a : function() {},
  b : 'xxx'
};

// ----------- AMD or CMD ----------------
define(function(require, exports, module){
  module.exports = {
    a : function() {},
    b : 'xxx'
  };
});

//引入
// ------------ node ---------
var m = require('./a');
m.a();

// ------------ AMD or CMD -------------
define(function(require, exports, module){
   var m = require('./a');
   m.a();
});
ES6 模块

在 export 之后,还可以被修改

//导出 a.js
export default function() {}
export function a () {}

var b = 'xxx';
export {b}; // 这是ES6的写法,实际上就是{b:b}

//引入
import $ from 'jquery';
import * as _ from '_';
import {a,b,c} from './a';
import {default as alias, a as a_a, b, c} from './a';

暴露模块使用 module.exports 和 exports.

加载模块使用 require().

AMD规范(Asynchronous Module Definition)

浏览器端的模块,不能采用”同步加载”(synchronous),只能采用”异步加载”(asynchronous)

AMD 采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

define(id?, dependencies?, factory)

ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict"

  1. export 命令

你可能感兴趣的:(es6)