我想使用一个函数来生成一个普通的对象,该对象将从ES6模块导出(在Node中运行之前使用Babel来转换我的代码)
以下模块是我想要制作的......
module_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'
,并轻松访问这些属性。
但这会特别引发错误(unexpected token
)。
我尝试过使用点差运算符(...
),并使用Object.assign({}, funcResults)
并在导出之前将其存储在const
中,但它们都会弹出错误。
这甚至可能吗?我误解了我可以输出什么样的物品?我是否必须明确地输出普通对象并包含其属性?
感谢任何帮助。
答案 0 :(得分:3)
根据规范,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
,无论您是否使用它们。