使用 CommonJS 和 ES6 中的 loadAMD 执行(依赖 amd-loader)
// 导出
module.exports = {
value: 100,
hello() {
console.log("hello");
},
};
// 导入
require('./xxx.js')
// 加载 ES6
(async function () {
// Directory import is not supported resolving ES modules imported
// var ES6 = await import("./ES6");
var ES6 = await import("./ES6/index.js"); // 需要写全路径
const { name, default: defaultValue } = ES6;
console.log({ value, defaultValue });
})();
npm install amd-loader
// 加载 AMD
var AMD = require("./AMD"); // 可以省略 后缀 和 文件夹导入(省略比如 index.js 的入口文件)
console.log(AMD)
// 导出
exports const name = 'ES6';
exports default {
value: 100,
hello() {
console.log("hello");
},
};
// 导入
import { name }, ES6 from './xxx.js'
需要在package.json
中配置
{
"type": "module"
}
可以直接加载,但是不能直接import
解析值
// CommonJS modules can always be imported via the default export, for example using:
// import { value } from './common.js'
import commonjs from 'common.js'
const { value } = commonjs
需要安装amd-loader
npm install amd-loader
import "amd-loader";
// SyntaxError: The requested module './amd.js' does not provide an export named 'default'
// 因为 `package.json` 的 type 是 module 统计目录下的 amd.js 被视为 es6 的
// import amd from "./amd.js";
// 需要指全路径
// import amdDemo1 from "../amd/demo1"; // ERR_UNSUPPORTED_DIR_IMPORT
// import amdDemo1 from "../amd/demo1/index"; // ERR_MODULE_NOT_FOUND
import amdDemo1 from "../amd/demo1/index.js";
// package/lib.js
define(function(require, exports, module){
// module.exports = console
return console
})
// index.js
define(["./package/lib"], function (lib) {
function foo() {
lib.log("hello world!");
}
return {
foo: foo,
};
});
define(function () {
// 可以直接 require
const cjs = require("../cjs");
return {
cjs,
};
});
// 也可以用 AMD 的方式,定义依赖
define(['../cjs'], function (cjs) {
return {
cjs,
};
});
// loades6.js
// es6 is Promise
define(async function () {
function hi() {
console.log("hi!");
}
const es6 = await import("../../es6/demo1/index.js");
return {
hi,
es6,
};
});
define(["./loades6"], function (es6) {
console.log(es6) // Promise
function foo() {
lib.log("hello world!");
}
return {
foo: foo,
es6,
};
});
可以看出,CommonJS、AMD 都是同步加载的,ES6 需要异步加载