不幸的是,我对JavaScript
模块加载器的了解仍在增长,我试图了解它们与新ES6 Modules
的关系。据我所知,使用CommonJS
或RequireJS
等模块加载器使用ES5
兼容JavaScript
确实需要使用异步模块加载器来提高性能并仅加载为需要使用相应的模块加载器的语法。
然而,查看ES6
module documentation并阅读其他信息,我认为通过import
和export
关键字本机支持模块加载。如果是这种情况,我是否更正ES6 JS modules
原生支持异步模块加载,因此我不需要使用其他工具,如CommonJS
或RequireJS
?
答案 0 :(得分:7)
在我看来,通过导入和导出关键字本身支持模块加载。
不完全是。 import
和export
声明仅定义每个模块的依赖关系和接口。它们允许静态提取命名所需模块的字符串,没有别的。
如果是这种情况,我是否不需要使用CommonJS或RequireJS等其他工具?
没有。您仍然需要为ES6模块使用加载程序,它可以解析名称或路径或从import
到实际模块文件的任何内容,并使用依赖于实现的方法加载它们。
有许多可用的工具或工具链,不同解决方案的示例是
答案 1 :(得分:2)
据我所知,ES6支持定义和导入模块的语法。导入所需模块的实际行为是基础架构的工作。
在现代浏览器中(截至2016年)没有内置功能来支持模块加载,因此您仍然需要像SystemJS这样的东西来进行实际加载。
答案 2 :(得分:1)
ES6 JavaScript文件本身被视为一个模块。如果您在.js文件中定义任何内容,它将只在该文件(本地范围)中可见。导出的作用是什么,它暴露定义为导出的类/变量,对外部可见。然后你可以将它导入另一个模块。还有其他方法可以定义模块,例如使用 Commonjs 或 AMD 等。如果要动态延迟加载模块,则需要模块加载器。恩。 Systemjs 就是这样一个动态模块加载器。它将在请求时动态地从服务器获取物理模块文件,并防止多个加载相同的文件。在过去的SPA应用程序中,必须在开始时加载所有内容才能工作。现在,使用动态模块加载器,我们只能拥有执行预期作业所需的文件。希望这会对你有所帮助。