我想使用一个函数来生成一个普通对象,该对象将从 ES6 模块导出(在 Node 中运行之前使用 Babel 转译我的代码)
以下模块是我想要制作的......
模块_a
function generatePlainObject(param1, param2, param3) {
return {
newProp1: param1,
newProp2: param2,
newProp3: param3,
};
}
export generatePlainObject(1, 2, 3);
...所以我可以在另一个模块中使用 import { newProp1, newProp2, newProp3 } from 'module_a'
,并轻松访问属性。
但这会抛出一个错误(意外的 token
)。
我尝试使用扩展运算符 (...
),并使用 Object.assign({}, funcResults)
并将其存储在 const
在导出之前,但它们都弹出错误。
这可能吗?我是否误解了我可以制作什么样的元素来导出?我是否必须显式键入普通对象并包含其属性?
感谢任何帮助。
最佳答案
根据规范,ES6 模块必须可静态分析。这意味着它们无法在运行时生成。这允许进行很多很好的优化,例如 tree shaking .
如果你真的想这样做,你可以使用这样的 CommonJS 模块......
module.exports = generatePlainObject(1, 2, 3);
像这样导入...
import { newProp1, newProp2 } from './otherFile';
另一个选项是默认导出,然后像这样导入整个对象......
export default generatePlainObject(1, 2, 3);
像这样导入...
import theWholeObj from './otherFile';
console.log(theWholeObj.newProp1);
这两种方法都不可静态分析,因此不可能进行树摇动。这意味着每当您导入 newProp1
时,您也将导入 newProp2
和 newProp3
,无论您是否使用它们。
关于javascript - 如何制作动态 ES6 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42569696/