我可以使用 `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
变量。
我想我问的是不可能的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
变量。