美文网首页前端核心知识
模块导出的几种方式以及区别

模块导出的几种方式以及区别

作者: 心情后花园 | 来源:发表于2018-05-28 07:32 被阅读0次

1. ES5 的导出方式

1.1 导出方式

es5 的导出方式有两种,一个是通过 exports,一个是通过 module.exports。
然而这两种导出方式,在我理解是 exports 是 module.exports 的简写

// exportMethod.js
const str = 'str';

console.log('------------------');
console.log('exports = ', exports);
console.log('module.exports = ', module.exports);

exports.a = str;

console.log('------------------');
console.log('exports = ', exports);
console.log('module.exports = ', module.exports);

console.log('equals = ', exports === module.exports);

// importMethod.js
const obj = require('./testExportMethods');

console.log('------------------');

console.log('require obj = ', obj);

运行 node importMethod.js 后,结果如下


输出结果

从结果以及一些资料上的搜索结果可以看出

  1. 每个 nodejs 文件都有一个 module 对象,对象有个属性是 exports,默认值是{}
  2. module.exports === exports,表明这两者是严格相等的,本质上 exports 是 module.exports 的引用(未看过源码)
  3. require 引用的其实是 module.exports 的导出值

1.2 常见的导出写法

var getName = function() {
  console.log('getName method');
}

var name = 'export';

// 1.
exports.name = name;
exports.getName = getName;

// 2.
module.exports.name = name;
module.exports.getName = getName;

// 3.
module.exports = {
  getName: getName,
  name: name
};

// 4. 直接 exports = 的话,会导致它与 module.exports 之间的引用关系断裂
// 需要再加上 module.exports,把 exports 重新引向 module.exports
exports = module.exports = {
  getName: getName,
  name: name
};

2. ES6 的导出方式

ES6 的导出有 2 种,分别是 export 和 export default.

// 输出和输入的序号对应
// export.js
const getName = function() {
  console.log('getName method');
}

const name = 'export';

// 1. 输出一个/多个变量,每个变量都需要赋予变量名
export const g = getName;
export const n = name;

// 2. 默认输出的一个变量,不需要赋予变量名,更加方便
export default getName;

// 3. 第一种的简写,看起来更加直观
export { getName, name };

// 4. 和第三种方法相似,但是import的方式不同
export default { getName, name }

// import.js
// 1. 和输出的变量名要一致
import { g, n } from './testExportMethod'

// 2. 名称随意
import getName from './testExportMethod';

// 3. 第一种方式的另外一种写法,importValue = { getName, name };
import * as importValue from './testExportMethod';

// 4. 名称随意
import importValue from './testExportMethod'


3. 四种导出方式的区别

综合起来看,ES5 和 ES6 各有两种写法,分别是 module.exports, exports, export, export defalut。下面是一些它们的区别

1. 用法不同

module.exports, exports 后面都是直接接 "="
export, export defalut 后面是导出的目标,不是直接和 "=" 相连

module.exports = {};
export.name = {};

export const method = () => {};
export default () => {};

2. 导出对象不同

module.exports, exports 是对象,而 export, export defalut 是 ES6 的语法

相关文章

  • 模块导出的几种方式以及区别

    1. ES5 的导出方式 1.1 导出方式 es5 的导出方式有两种,一个是通过 exports,一个是通过 mo...

  • vue 导入、导出模块的几种方式

    ES6 模块导入、导出 ES6规范 模块导入方式:importES6规范 模块导出方式:export、export...

  • 补充: JS模块化

    通过export向外部导出通过import从外部导入 导出的几种方式 导入的几种方式 举个列子 注意事项 导入时,...

  • es6-export 和 export default

    总共有两种导出模块的方式:命名导出(export)和默认导出(export default) 命名导出 一个模块可...

  • 模块引入

    模块引入是node一个重要的知识点导出方式:方式1: 方式二: 引入方式 这两种引入方式有什么区别呢?、 我们已知...

  • JS Related

    JS几种数组遍历方式以及性能分析对比 javascript中in和hasOwnProperty区别

  • 如何正确证明 Commonjs 模块导出是值的拷贝,而 ES m

    关于 Commonjs 和 ES module 模块导出的区别,一般流行一种说法:CommonJS 模块输出的是一...

  • 常量和数据类型

    文章来自:zhouxiaoshuai 常量及数据类型 回顾题:PHP中字符串有几种定义方式,以及各自的区别? 答:...

  • import

    按命名,分为两种导入导出方式。 命名模块 等价于: 默认模块 一个文件只能有一个默认导出,导出和导入的名称可不一致

  • Linux中常见的5大模块详解!

    Linux中的模块主要分为以下几种:进程调度模块、进程间通信模块、内存管理模块、文件系统模块以及网络接口模块,具体...

网友评论

    本文标题:模块导出的几种方式以及区别

    本文链接:https://www.haomeiwen.com/subject/eqbpjftx.html