在CommonJS 中
// CommonJS模块
let { stat, exists, readFile } = require('fs');
// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;
而ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。
// ES6模块
import { stat, exists, readFile } from 'fs';
常用export形式
// 变量和常量
export var firstName = 'Michael';
export const year = 1958;
或者
var firstName = 'Michael';
const year = 1958;
export {firstName ,year }
// 函数和类
export function multiply(x, y) {
return x * y;
};
// ----------------
function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
用as 关键字可以换变量名,输出多次
注意写法:
// 报错
function f() {}
export f;
// 正确
export function f() {};
// 正确
function f() {}
export {f};
export default 命令
// export-default.js
export default function () {
console.log('foo');
}
// import-default.js
import customName from './export-default';
customName(); // 'foo'
// 或者写成
function foo() {
console.log('foo');
}
export default foo;
混合写法:
export default function (obj) {
// ···
}
export function each(obj, iterator, context) {
// ···
}
export { each as forEach };
import _, { each, forEach } from 'lodash';
合并多文件变量:
// constants/db.js
export const db = {
url: 'http://my.couchdbserver.local:5984',
admin_username: 'admin',
admin_password: 'admin password'
};
// constants/user.js
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];
----------------
// constants/index.js
export {db} from './db';
export {users} from './users';
--------------
// script.js
import {db, users} from './constants/index';