我正在尝试在当前项目中完全使用ES6 +语法,但是与ES5模块相比,ES6 +模块似乎存在缺陷。
Q1。有没有一种方法可以使用动态名称来导出变量/函数,这类似于对象中的动态键。
const externalName = 'Joeys\' Pizza'
const pizzaShop = {tel: '555-555-555'}
// ES5
exports[externalName] = pizzaShop // works 👍
// ES6
export const [externalName] = pizzaShop // error 👎
Q2。我有一些要重用的导出逻辑,因此我将其封装到一个函数中。但是,似乎这种事情在ES6 +模块中是不可能的。
// ES5: all good 👍
const exporter = db => {
exports.first = db.collections('first')
exports.second = db.collections('second')
}
// ES6: compiler says: Modifiers cannot appear here 👎
const exporter = db => {
export const first = db.collections('first')
export const second = db.collections('second')
}
任何建议,信息或建议将不胜感激。目前,我认为这两种模块语法可能只是以不同的方式处理,另一方面,可能有一些我不知道的解决方法。
提前致谢。
最佳答案
有没有一种方法可以使用动态名称来导出变量/函数,这类似于对象中的动态键。
不,那里没有。您需要能够命名导出,它不能是动态的。
如果绝对必要,请导出对象并在其上放置任意属性。
我有一些要重用的导出逻辑,因此我将其封装到一个函数中。但是,似乎这种事情在ES6 +模块中是不可能的。
无论如何,您在ES5中所做的事情值得怀疑。调用exporter
确实修改了exports
对象,多次调用将导致绝对破坏。
您可以通过执行以下操作来复制该行为
export var first, second;
function exporter(db) {
first = db.collections('first');
second = db.collections('second');
}
要么
var database;
export function first() {
return database.collections('first');
}
export function second() {
return database.collections('second');
}
function exporter(db) {
database = db;
}
但是最好只创建一个新对象而不是弄乱导出内容:
export default function exporter(db) {
return {
first: db.collections('first'),
second: db.collections('second'),
};
}