关于 AMD 以及 CommonJS

Module 的语法

概述

es6之前

AMD规范:全称”Asynchronous Module Definition”,称为 异步模块加载规范 。一般应用在浏览器端。流行的浏览器端异步加载库RequireJS实现的就是AMD规范。

  • 依赖前置,提前执行!

CommonJS: 称为同步模块加载规范,也就是说,只有加载完成,才能执行后面的操作。用于服务器端。

  • CommonJS 模块就是对象,输入时必须查找对象属性。代码运行时加载,输出的值是值得拷贝
let { stat, exists, readFile } = require('fs'); //只有先全部加载`fs`这个方法才能在这个对象上读取这个三个方法

es6中的module

ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。输入的是指的引用

  • 这种加载称为“编译时加载”或者静态加载,效率更高
// ES6模块
import { stat, exists, readFile } from 'fs';  //从`fs`模块加载3个方法不用全部加载

export

每个module都是一个独立的文件,该文件类的所有内容外部都无法获取export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

  1. 写法

    export const name='haha'
    
    //也可以
    name='haha'
    sex='male'
    export {name,sex} //可以接受多个属性
    
    //输出变量和类
    
    export function fn(){}
    
    
  2. export 输出的变量是有名字的,可以使用as替换

    function fn1(){}
    
    export {fn1 as fn2}
    
    

import

import ‘fs’ 这样会加载所有

import {xx,xxx} form ‘xxxxx’

import 导入的时候需要知道要导入的方法名称

如果使用了export default 的默认输出,我们import的时候可以用任意的名字

export.js

export default function fn(){} //一个模块只能有一个默认输出,还是可以通过export 正常导出其它函数,import {xx}通过指定名称正常导入


import.js 

import foo from 'export.js' //import时候不能使用大括号

Node 加载


node将两者分开,ES6 模块和 CommonJS 采用各自的加载方案。

CommonJS 模块的输出都定义在module.exports这个属性上面。Node 的import命令加载 CommonJS 模块,Node 会自动将module.exports属性,当作模块的默认输出,即等同于export default xxx

  • commonJS
    // a.js
    module.exports = {
        foo: 'hello',
        bar: 'world'
    };
    
    // 等同于
    export default {
        foo: 'hello',
        bar: 'world'
    };
    

你可能感兴趣的:(JavaScript)