`export Module from "module"` 是有效的 JavaScript 语法吗?
Is `export Module from "module"` a valid JavaScript syntax?
问题
在我公司的 React Native 项目中,我遇到了这样的代码,聚合了多个模块的导出:
export Icon from "./Icon";
export Input from "./Input";
export Pills from "./Pills";
我的编辑强调这是无效语法。我检查了 MDN docs on export
,实际上他们没有列出这样的聚合语法。从他们列出的内容看来,合适的应该是:
export { default as Icon } from "./Icon";
export { default as Input } from "./Input";
export { default as Pills } from "./Pills";
但是第一个代码在我所在的 React Native 项目中工作。
问题
这是否是 JavaScript 中的有效语法,还是仅可用于我们在项目中使用的某些第三方包?
你是对的,但你不是真正使用ES6模块。
您正在使用 metro-react-native-babel-preset 的 babel。这使得上述语法有效。
一如既往,有一个 proposal 使其成为语言的一部分,但它目前处于第一阶段。
来自提案:
The proposed addition follows this same symmetric pattern:
Importing the "default" name (existing):
import v from "mod";
Exporting that name (existing):
import v from "mod"; export {v};
Symmetric "export from" (proposed):
export v from "mod";
在 ES6 和 Javascript 的上下文中。从语法上讲,本机方法是无效的。然而,正如@federkun 所建议的,它在 babel 的上下文中是有效的,并且已经在同一个桌面上提出了建议。
但是,"default"用于导出默认导出,可以再次导出
export {default} from '.\example.js'
或者您可以使用花括号中的名称导出来仅导出命名导出。此外,要导出所有命名导出,您可以使用“*”
export * from '.\example.js'
export {test} from '.\example.js'
或者您可以添加 babel 依赖项以使用相同的语法。
问题
在我公司的 React Native 项目中,我遇到了这样的代码,聚合了多个模块的导出:
export Icon from "./Icon";
export Input from "./Input";
export Pills from "./Pills";
我的编辑强调这是无效语法。我检查了 MDN docs on export
,实际上他们没有列出这样的聚合语法。从他们列出的内容看来,合适的应该是:
export { default as Icon } from "./Icon";
export { default as Input } from "./Input";
export { default as Pills } from "./Pills";
但是第一个代码在我所在的 React Native 项目中工作。
问题
这是否是 JavaScript 中的有效语法,还是仅可用于我们在项目中使用的某些第三方包?
你是对的,但你不是真正使用ES6模块。
您正在使用 metro-react-native-babel-preset 的 babel。这使得上述语法有效。
一如既往,有一个 proposal 使其成为语言的一部分,但它目前处于第一阶段。
来自提案:
The proposed addition follows this same symmetric pattern:
Importing the "default" name (existing):
import v from "mod";
Exporting that name (existing):
import v from "mod"; export {v};
Symmetric "export from" (proposed):
export v from "mod";
在 ES6 和 Javascript 的上下文中。从语法上讲,本机方法是无效的。然而,正如@federkun 所建议的,它在 babel 的上下文中是有效的,并且已经在同一个桌面上提出了建议。 但是,"default"用于导出默认导出,可以再次导出
export {default} from '.\example.js'
或者您可以使用花括号中的名称导出来仅导出命名导出。此外,要导出所有命名导出,您可以使用“*”
export * from '.\example.js'
export {test} from '.\example.js'
或者您可以添加 babel 依赖项以使用相同的语法。