使用 ES5 语法在 Node 中混合默认和命名导出
Mixed default and named exports in Node with ES5 syntax
我在 exporting/importing 模块方面的所有经验都来自于使用 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
但我不能两者都做。我以为我可以这样命名其中一个导出 "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 完成此双重 default/named 导出?
您想将 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!'
如果你不想重复命名导出,你总是可以做类似的事情
module.exports = defaultFunction;
module.exports = Object.assign(module.exports, {
namedFunction1,
namedFunction2,
});
然后你可以像往常一样要求;
const myModule = require('./myModule');
myModule();
myModule.namedFunction1();
只需将 exports
重新分配给 module.exports
喜欢:
//name.js
const NameType = {
foo: "bar",
};
function Name(name) {
this.name = name;
}
module.exports = Name; // assign default export to Name
exports = module.exports; // re-assign exports to point it to the updated location.
exports.NameType = NameType; // now you can use named export as usual
在另一个文件中,您可以像这样导入:
const Name = require("./name");
const { NameType } = require("./name");
这是可行的,因为 默认值 module = { exports: {} }
和 exports = module.exports
参考:Difference between "module.exports" and "exports" in the CommonJs Module System
我在 exporting/importing 模块方面的所有经验都来自于使用 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
但我不能两者都做。我以为我可以这样命名其中一个导出 "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 完成此双重 default/named 导出?
您想将 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!'
如果你不想重复命名导出,你总是可以做类似的事情
module.exports = defaultFunction;
module.exports = Object.assign(module.exports, {
namedFunction1,
namedFunction2,
});
然后你可以像往常一样要求;
const myModule = require('./myModule');
myModule();
myModule.namedFunction1();
只需将 exports
重新分配给 module.exports
喜欢:
//name.js
const NameType = {
foo: "bar",
};
function Name(name) {
this.name = name;
}
module.exports = Name; // assign default export to Name
exports = module.exports; // re-assign exports to point it to the updated location.
exports.NameType = NameType; // now you can use named export as usual
在另一个文件中,您可以像这样导入:
const Name = require("./name");
const { NameType } = require("./name");
这是可行的,因为 默认值 module = { exports: {} }
和 exports = module.exports
参考:Difference between "module.exports" and "exports" in the CommonJs Module System