javascript - 如何使用 ES6 模块为变量/函数使用动态名称导出?
问题描述
我正在尝试在我当前的项目中完全使用 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'),
};
}
推荐阅读
- python - Python中的傅里叶变换
- python-3.x - 当用户按下时,如何让 Python3 计算两个数字
或单击计算按钮而不使用两个单独的 def 函数? - javascript - 动画效果不发挥作用
- c++ - 为什么 (var) 被认为是左值?
- sonarqube - 新文件未显示在短期分支中
- java - BitSet over List、Set 的用例
- ruby-on-rails - 如何使用 Rails Validations 允许和属性变量成为两个值之一?
- java - 扫描仪上的 NoSuchElementException,我该如何摆脱它?
- javascript - 有没有办法在 Safari 的光标插入符号后面发送 textarea 占位符文本?
- java - 为不同的用户重复相同的变量