Node.js和ES6中的module.exports与export默认

Node.js和ES6中的module.exports与export默认,第1张

Node.js和ES6中的module.exports与export默认

问题是

  • 如何在CommonJS中模拟ES6模块
  • 您如何导入模块
ES6到CommonJS

在撰写本文时,没有环境本地支持ES6模块。在Node.js中使用它们时,您需要使用Babel之类的东西将模块转换为CommonJS。但是那到底是怎么发生的呢?

许多人认为

module.exports = ...
等同于
export default ...
exports.foo ...
等同于
exportconst foo = ...
。但这不是真的,或者至少不是Babel是如何做到的。

ES6

default
导出实际上也 被称为
导出,只是它
default
是一个“保留”名称,并且对其有特殊的语法支持。让我们看一下Babel如何编译命名和默认导出:

// inputexport const foo = 42;export default 21;// output"use strict";Object.defineProperty(exports, "__esModule", {  value: true});var foo = exports.foo = 42;exports.default = 21;

在这里,我们可以看到默认导出成为

exports
对象的属性,就像
foo

导入模块

我们可以通过两种方式导入模块:使用CommonJS或使用ES6

import
语法。

您的问题: 我相信您正在执行以下 *** 作:

var bar = require('./input');new bar();

期望为其

bar
分配默认导出的值。但正如我们在上面的示例中看到的那样,默认导出已分配给该
default
属性!

因此,为了访问默认导出,我们实际上必须做

var bar = require('./input').default;

如果我们使用ES6模块语法,即

import bar from './input';console.log(bar);

Babel会将其转换为

'use strict';var _input = require('./input');var _input2 = _interopRequireDefault(_input);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }console.log(_input2.default);

您会看到对的每个访问

bar
都转换为访问
.default



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5049296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存