javascript - 使用 ES5 语法在 Node 中混合默认和命名导出

标签 javascript node.js node-modules ecmascript-5

我在导出/导入模块方面的所有经验都是在 ES6 中使用 exportimport 获得的,您可以在其中执行类似这样的操作,让单个模块导出默认函数以及单独的命名函数。

// module.js
export default mainFunction
export { namedFunction }

// main.js
import mainFunction from 'functions'
mainFunction()

import { namedFunction } from 'function'
namedFunction()

但是我无法弄清楚如何使用 module.exportsrequire 对 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 完成这种双重默认/命名导出?

最佳答案

您想将 module.exports 的值分配给您的默认函数,然后将所有命名导出作为该函数的属性。

const defaultFunction = () => { console.log('default!'); };
const namedFunction1 = () => { console.log('1!'); };
const namedFunction2 = () => { console.log('2!'); };

const myModule = module.exports = defaultFunction;
myModule.namedFunction1 = namedFunction1;
myModule.namedFunction2 = namedFunction2;

假设它在 myModule.js 中。然后你可以这样做:

const myModule = require('./myModule');
myModule(); // Prints: 'default!'
myModule.namedFunction1(); // Prints: '1!'

关于javascript - 使用 ES5 语法在 Node 中混合默认和命名导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047173/

相关文章:

javascript - 如何访问 JSON API 响应中的嵌套信息?

node.js - GitHub Action :将生成的目录复制到Docker镜像时出错

javascript - 从 Graph 获取单个消息

javascript - 有没有办法在javascript中将子数组和子子数组合并为一个?

javascript - 将数据从数组排列到对象

c# - 如何处理用户操作

node.js - npm init 错误 - 无法创建应用程序

node.js - 我如何在 gulp 4.0 版中重写这个 gulpfile.js

javascript - 滚动到页面的那一部分后如何加载图像?

javascript - 视觉 : why this simple v-for doesn't work: Elements in iteration expect to have 'v-bind:key' directives vue/require-v-for-key error