【发布时间】:2019-05-31 12:16:30
【问题描述】:
我在导出/导入模块方面的所有经验都来自使用 export 和 import 的 ES6,您可以在其中执行类似的操作来让单个模块导出默认函数以及单独的命名函数。
// module.js
export default mainFunction
export { namedFunction }
// main.js
import mainFunction from 'functions'
mainFunction()
import { namedFunction } from 'function'
namedFunction()
但是,我不知道如何使用 module.exports 和 require 使用 ES5 样式导入来做到这一点。据我了解,我可以导出单个默认值:
// module.js
module.exports = function mainFunction() {}
// main.js
const mainFunction = require('module.js')
或者我可以创建命名导出:
// module.js
module.exports = {
namedFunction: function() {}
}
// main.js
const namedFunction = require('module.js').namedFunction
但我不能两者都做。我想我可以像这样将其中一个导出命名为“默认”,但它不起作用
// module.js
module.exports = {
default: function() {},
namedFunction: function() {}
}
// main.js
const mainFunction = require('module.js') // does not work
const mainFunction = require('module.js').default // works, but not what I want
const namedFunction = require('module.js').namedFunction
如何使用 ES5 完成这种双重默认/命名导出?
【问题讨论】:
-
ES6 中的导出(使用 babel 编译)导出默认为一个名为
default的属性并设置一个属性_esModule。导入默认模块时,如果存在_esModule,则会导入default。否则,它将整个模块作为默认值导入。这种行为导致了一些confusion。
标签: javascript node.js node-modules ecmascript-5