我可以使用 `export` 将对象导出为 "`module.export`"

Can I export an object using `export` as "`module.export`"

我想我问的是不可能的OOB,但我想确认一下。

我们正在升级到 ES6(使用 Babel)。项目是一个网站,使用 AMD (requirejs)。我想将实用程序模块 (foolib) 转换为 ES6,但从 ES6(使用 import)或现有的 ES5/AMD 模块中使用它.

// foolib.es6
export { // as expected, this doesn't work
    method1: function () { ... },
    value1: 123.456
};

// consumer1.es6
import foolib from "foolib";

// consumer2.js
define(["foolib"], function (foolib) {});

我明白解决办法是把foolib.es6改成如下:

export function method1() { ... };
export let value1 = 123.456;

然而实际上 return 从 foolib 编辑的条目数量是荒谬的。所以我希望有一种方法可以导出现有的对象文字而无需重写每一行。

此外,我意识到这很可能是不可能的,因为 AMD 导入(使用 define)和 import 机制(后来与具有 exports 的对象一起工作)挂在它上面的值,包括 default 值,而前者期望单个值被 returned).

我认为可能可行的一个解决方案是将我的对象从 foolib.es6 导出为 default,然后调整 requirejs 默认加载程序以检查导入的值是否为 esModule 和 return 默认值:value && value.__esModule && value.default || value。这应该工作吗? (我仍然希望有一个更简单的解决方案)。

您用于导出对象的语法无效,因为您没有给对象命名,所以它不能是命名导出,也没有指定它是默认导出,所以它不能默认导出。将其更改为默认导出:

// foolib.es6
export default {
  method1: function () {}, 
  value1: 123.456
}
// consumer.es6
import foolib from "foolib";

console.log(foolib.value) //=> 123.456

您可以使用 babel-plugin-add-module-exports Babel 插件将默认导出恢复为 Node-land 中 module.exports 的值。

正如您所发现的,确保在任何其他 -modules- 插件之前包含此插件,例如 transform-es2015-modules-amd.

这可能会迟到,但您也可以使用 named export,这与 @sdgluck 提到的 default 方法略有不同。

const method1 = function () {};
const value1 = 123.456;

export { method1, value1 };

我喜欢这种方法,因为你可以import他们直接点赞

import { method1, value1 } from 'foolib';

没有接触到 default 变量。