【问题标题】:How does ES6 import / export play along with CommonJS exports / requireES6 导入/导出如何与 CommonJS 导出/要求一起发挥作用
【发布时间】:2016-04-19 14:12:19
【问题描述】:

有时您想组合这些语法,最常见的是importing 使用 commonjs 语法的东西。例如这里已经讨论了一些案例:

How to correctly use ES6 "export default" with CommonJS "require"?

但肯定还有更多可能发生的情况!

【问题讨论】:

  • 这取决于您使用的模块语法转译器和模块加载器或捆绑器。您应该能够在他们的文档中找到所有内容。

标签: javascript module ecmascript-6 commonjs


【解决方案1】:

正如@Bergi 和@Mike 在 cmets 中指出的那样,它取决于转译器(最常见的是 Babel),它如何处理 ES6 导入/导出。几个例子,你会从 Babel 中得到什么(使用它的标准插件):

CommonJS 导出,ES6 导入

module.exports = 1    // a.js
import one from './a' // b.js
// one === 1

module.exports = {one: 1}  // a.js
import obj from './a'      // b.js
// obj is {one: 1}

import * as obj from './a' // b.js
// obj.one === 1 ; however, check out the 'funky stuff' below

import {one} from './a'    // b.js
// one === 1

ES6 导出,CommonJS 需要

export default 1 // a.js
const one = require('./a').default
// one === 1

export const one = 1
const one = require('./a').one
// one === 1

时髦的东西

module.exports = 1          // a.js
import * as obj from './a'  // b.js
// obj is {default: 1}

module.exports = {one: 1}   // a.js
import * as obj from './a'  // b.js
// obj is {one: 1, default: {one: 1}}

【讨论】:

  • 这个规范在哪里?我 99% 确定这完全取决于转译器。
  • @MikeC:你说得对,没有关于这两种语法应该如何互操作的规范。我相应地编辑了答案。
  • @Bergi:不,没有,我的错。
猜你喜欢
  • 2019-12-18
  • 2016-08-31
  • 2016-06-28
  • 2015-11-05
  • 2022-08-10
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
相关资源
最近更新 更多