我正在研究Javascript中的新import
,export
功能,但想知道这些语句在语法上哪里合法?
我了解类似以下内容的内容是非法的:
(function(){ import thing from './thing.js'; })();
但这是否意味着import
仅在模块脚本的顶部合法?还是在全球范围内?例如,这是怎么回事:
import a from './a.js'; (function(){ // ... do something with a ... })(); import b from './b.js'; // ...
此限制是否也适用于export
?例如,以下内容合法吗?
(function(){ function internalFunc() { // ... } export { internalFunc }; })();
在规范的当前草案中,我似乎找不到任何东西。
答案 0 :(得分:1)
javascript中没有这样的实现。已经计划好了但是还没有浏览器实现它。它已在Webpack和Babel等某些编译器中实现。 NodeJ中也有要求。但不是原生于javascript。 导入文件的另一种方法是使用RequireJS库。
参考:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/import
修改
回答您在评论中提出的问题:AFAIU在已经可用的导入和导出实现中,是的,它们在全球范围内都可用,并且是导入和导出。 但是,在您的评论问题中,不是很清楚的是您的意思是“仅在全球范围内可用”。没有这样的封闭空间不能访问全局空间。全球空间无处不在,进出口也是如此。
答案 1 :(得分:0)
我对规范的理解是:
模块导出语句应位于模块的顶层
模块导入语句应位于模块的顶层
函数样式的模块导入表达式(返回导入项目的承诺)在允许表达式的任何地方都可以使用
正如您所说,目前仅在编译器中受支持,所以我不确定现有的编译器(Babel)是否遵循这些规则。
答案 2 :(得分:0)
1)如果您只想玩import
,export
语句,则可以在Google chrome中使用它而无需任何转译(通过webpack);)
在进行一些研发时,我总是使用ES6模块。然后,只有当我的临时工作值得时,我才开始考虑进行移植。
请不要忘记以这种方式包含脚本:
<script type="module" src="index.js"></script>
2)如果您需要编写一些nodejs脚本,则打开一些实验性标志以使用模块-https://nodejs.org/api/esm.html#esm_enabling