Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ES5语法在节点中混合默认和命名导出_Javascript_Node.js_Node Modules_Ecmascript 5 - Fatal编程技术网

Javascript 使用ES5语法在节点中混合默认和命名导出

Javascript 使用ES5语法在节点中混合默认和命名导出,javascript,node.js,node-modules,ecmascript-5,Javascript,Node.js,Node Modules,Ecmascript 5,我所有导出/导入模块的经验都是在ES6中使用导出和导入,您可以这样做,让单个模块导出默认函数以及单独的命名函数 // module.js export default mainFunction export { namedFunction } // main.js import mainFunction from 'functions' mainFunction() import { namedFunction } from 'function' namedFunction() 但是,我不

我所有导出/导入模块的经验都是在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
但我不能两者都做。我想我可以这样命名一个导出“default”,但它不起作用

// 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完成此双重默认/命名导出?

您希望将
模块的值指定为默认函数。导出
,然后将所有命名导出作为该函数的属性

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!'

如果不想重复命名的导出,可以执行以下操作

module.exports = defaultFunction;
module.exports = Object.assign(module.exports, {
    namedFunction1,
    namedFunction2,
});
然后你可以要求像平常一样

const myModule = require('./myModule');
myModule();
myModule.namedFunction1();

ES6中的导出(使用babel编译)将默认值导出到名为
default
的属性,并设置属性
\u esModule
。导入默认模块时,它将导入
默认值
iff
\u esModule
存在。否则,它将导入整个模块作为默认值。这种行为造成了一些问题。我想这是有原因的,但为什么不直接分配给module.exports呢?我试过了,似乎效果不错:
module.exports=defaultFunction;module.exports.namedFunction1=namedFunction1@arichards如果这对你来说更容易/更好,那么这应该行得通。如果我合理地确定该函数将在使用它的地方调用
myModule
,那么我喜欢在定义它的地方调用它
myModule
。但那只是我的偏好。