赞
踩
博客迁移:不恰饭的小站
不恰饭的小站
NodeJS 中有两种模块加载方式:CommonJS,ECMAScript modules;前者为 NodeJS 内部实现,ES Modules 为 JS 标准加载方式。
在 Node.js 模块系统中,每个文件都被视为一个单独的模块。
ECMAScript 模块是打包 JavaScript 代码以供重用的官方标准格式。使用 import 和 export 导入导出模块。
Node.js 默认将 JavaScript 代码视为 CommonJS 模块。可以通过.mjs 文件扩展名,package.json 'type’字段,将 JavaScript 代码将 ECMAScript 视为模块
Nodejs 中的模块是可执行的,nodejs 使用类似以下语法将模块封装为函数
(function(exports, require, module, __filename, __dirname) {
// Module code actually lives in here
});
通过这种方式
文件绝对路径所在的目录
文件的绝对路径
exports 是 module.exports 的简写,两者关系如下相关资料
伪代码实现说明
function require(/* ... */) {
const module = { exports: {} };
((module, exports) => {
// Module code here. In this example, define a function.
function someFunc() {}
exports = someFunc;
// At this point, exports is no longer a shortcut to module.exports, and
// this module will still export an empty default object.
module.exports = someFunc;
// At this point, the module will now export someFunc, instead of the
// default object.
})(module, module.exports);
return module.exports;
}
建议不要使用 exports,因为 module.exports 都能做,还不会出错
区分符 specifier 指以下文句中的 ‘path’
import { sep } from 'path'
specifier 有如下形式
import 语句(import * from ‘xxx’)只允许在 ES 模块中使用,但在 CommonJS 中支持动态 import()表达式来加载 ES 模块。
只用来加载 CommonJS 模块
CommonJS 模块由一个 module.exports 对象组成。可以导出任何类型的对象
function add(a, b) {
return a + b;
}
module.exports = add;
let add_commonjs_modules_exports = require('./modules/add_commonjs_modules_exports.js');
console.log(add_commonjs_modules_exports(1, 2));
function add(a, b) {
return a + b;
}
exports.add = add;
let add_commonjs_exports = require('./modules/add_commonjs_exports.js');
console.log(add_commonjs_exports.add(1, 2));
function add(a, b) {
return a + b;
}
exports = add; //此种方式无法导出任何内容
let add_commonjs_exports_error = require('./modules/add_commonjs_exports_error.js');
console.log(add_commonjs_exports_error(1, 2)); //此种有错误,模块内容有误
export function add(a, b) {
return a + b;
}
export default add; //用于 import XXX from ""这种简写形式
import * as fun from './modules/add_ES_export.mjs';
console.log(fun);
console.log(fun.add(1, 2));
/*
fun.add = function (a, b) { //由export导出的为const
return a - b;
};*/
fun.default.add = function (a, b) {
//由export导出的为const,但其对象属性可修改
return a - b;
};
console.log(fun.add(1, 2));
console.log(fun.default.add(1, 2));
import { add } from './modules/add_ES_export.mjs';
console.log(add(1, 2));
import a from './modules/add_ES_export.mjs'; //等价于 import { default as a } from './modules/add_ES_export.mjs';
console.log(a);
import { default as b } from './modules/add_ES_export.mjs';
console.log(b);
function add(a, b) {
return a + b;
}
module.exports = add;
import * as c from './modules/add_commonjs_modules_exports.js'; //es中调用commonjs模块
console.log(c.default(1,2));
import add1 from './modules/add_commonjs_modules_exports.js';
console.log(add1(1,2));
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。