无法在Babel中使用es6 ' export Module from 'file' '
Unable to use es6 `export Module from 'file'` in Babel
我正在使用ES6构建一个用于与服务器通信的JavaScript库。服务器有特定类型的json编码消息,它通过WebSocket发送和接收。
为了确保所有的消息字段都被包含,并且没有额外的字段被发送到服务器,每个消息类型都有自己的类。每条消息都在自己的文件中定义,结构如下:
export default class NameOfMessage extends BaseMessage {
constructor(values) {
// Here is code that checks values and sets them as properties
// so that calling `JSON.stringify(obj)` will return the data
// to be sent to the server.
}
}
如果用户在一个特定的文件中只需要一种或两种消息类型,他们可以写import NameOfMessageType1 from 'package_name/messages/type1'
, import NameOfMessageType2 from 'package_name/messages/type2'
等。
但是,如果用户需要许多消息类型,那么将它们全部包含将变得很麻烦。出于这个原因,我创建了一个额外的文件messages.js
,其中import
保存所有的消息文件,然后重新- export
保存它们。这样,用户可以执行import * as Message from 'package_name/messages'
,并访问Message.Type1
、Message.Type2
等消息类型。
根据我的阅读,(包括http://www.2ality.com/2014/09/es6-modules-final.html和https://hacks.mozilla.org/2015/08/es6-in-depth-modules/(标题为"聚合模块"的部分),以及其他来源),我应该能够使用以下内容作为messages.js
文件的内容:
export Type1 from './messages/type1';
export Type2 from './messages/type2';
...
然而,当我在执行import * as Messages from 'package_name/messages'
的任何文件上运行Babel时,我没有得到任何结果。(它只是不做任何事情)。
当我将文件更改为以下内容时,一切都如预期的那样工作:
import Type1 from './messages/type1';
import Type2 from './messages/type2';
export {Type1, Type2};
...
为什么另一种方法不行?
仔细阅读官方规范就会发现,使用export ... from ...
只有两种方式:
ExportDeclaration : export * FromClause ; export ExportClause FromClause ; ... // More export declarations ExportClause : { } { ExportsList } { ExportsList , }
export
的所有其他用途都不接受FromClause
。事实证明,from
的唯一合法用途是与*
连接,或者与用大括号括起来的出口列表连接。如果不显式引用default
,则无法使用它。
既然是这种情况,下面的文件可以工作:
export {default as Type1} from './messages/type1';
export {default as Type2} from './messages/type2';
...
我只是想补充一下,我有一个非常类似的问题。变量/模块,我试图直接从另一个文件导出回来作为undefined
。但是,如果我把它分成两步,先导入,然后再导出,那就没问题了。问题的原因最终是我在做某种类型的循环导入。
- 为什么要对define.md和module.exports进行条件检查,以及条件何时通过
- Module.start()已激发两次
- module.js在运行iron节点时找不到模块
- ES6to5, ES6 Module Transpiler and Babel
- 在jasmine规范中使用module.exports
- 我们可以在一个js文件中有多个module.exports语句吗
- MongoDB Querying: Order & Export Results
- module.exports一个jQuery插件
- “module.exports.instance”是什么意思
- Module.exports通过Mongoose调用返回undefined
- 我可以在Node中以编程方式更改.js文件的module.exports中的JSON对象吗
- 使用module.exports和ES6导出导入
- 调用module.exports上的函数时发生CommonJS非法调用错误
- Highcharts - export to base64
- 如何从module.exports访问函数
- 为什么在定义导出属性之前调用module.exports时仍然有效
- 如何将数据从 module.export 函数传递到对象
- 无法在Babel中使用es6 ' export Module from 'file' '
- ESLint -选择Export Default而不是Module.Exports
- 如何在nodeJS中要求带有module.export的.json文件