javascript - 如何制作动态 ES6 模块?

标签 javascript module ecmascript-6 babeljs

我想使用一个函数来生成一个普通对象,该对象将从 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 时,您也将导入 newProp2newProp3,无论您是否使用它们。

关于javascript - 如何制作动态 ES6 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42569696/

相关文章:

php - IDE 能够保存到两个位置和一个 SVN 存储库吗?

javascript - 在一个对象在另一个对象中声明之前传递该对象

ecmascript-6 - 如何仅针对 ForOfStatement 关闭 ESLint 的无限制语法规则?

javascript - 无法从服务器端读取隐藏字段值

javascript - 当单击部分中的每个 block 时,显示一个 block ,同时使用 jquery 隐藏其他 block 出现第二个 block ,第三个和第四个

javascript - 是什么导致我的 jQuery 函数无法运行?

scala - Play 模块测试和 FakeApplication

python - 从父包导入子模块

python - 如何在 Windows 上正确设置 PyQGIS 环境?

javascript - react : How to show Error Message if no data is found in obj