Javascript-“ import”和“ export”语句在哪里合法?

时间:2018-12-21 21:49:15

标签: javascript import module

我正在研究Javascript中的新importexport功能,但想知道这些语句在语法上哪里合法?

我了解类似以下内容的内容是非法的:

(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 };

})();

在规范的当前草案中,我似乎找不到任何东西。

3 个答案:

答案 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)如果您只想玩importexport语句,则可以在Google chrome中使用它而无需任何转译(通过webpack);)

在进行一些研发时,我总是使用ES6模块。然后,只有当我的临时工作值得时,我才开始考虑进行移植。

请不要忘记以这种方式包含脚本:

<script type="module" src="index.js"></script>

2)如果您需要编写一些nodejs脚本,则打开一些实验性标志以使用模块-https://nodejs.org/api/esm.html#esm_enabling