现代 JavaScript 模块加载器是否过时了?

Have Module Loaders become Obsolete with Modern JavaScript?

现在,我们可以在浏览器上进行以下操作:

// module.js
var a = 10;
var m = 20;
export {a,a as aa};
export var b = 30;
export function f(){return m;};
export class cl{}

然后在主 HTML 文件上,比如 index.html:

<!DOCTYPE html><html><body>
<script type="module">
    import {a,b,aa,aa as aaa, f, cl} from "./module.js";
    import * as X from "./module.js";
    console.log(a,b,aa,aaa,X.aa,X.aaa,f(),cl);   
                  // 10 30 10 10 10 undefined 20 class cl{}
    export {a,b as z} from "./module.js";  
                  // re-exports a and b
    export * from "./module.js";      
                  // re-exports everything except default
</script>
</body></html>

我们甚至可以使用新的 ECMASCript2020 语法 (import()) 动态加载导入。

这让我想知道传统的模块打包器,如 webpack、browserify、rollup、AMD、requireJS 等是否已经过时了?我个人从未使用过它们。如果曾经使用过它们的人告诉我现在是否绝对有必要使用它们以获得它们过去提供的好处,我将不胜感激。

requirejs 或其他基于 AMD 的加载器仍然很好,如果你有一些相当老的 vanilla JS,它们仍然工作得很好。如果你正在开发一些新的 UI/JS 应用程序,你可以使用 webpack。 ES2020 可能无法在所有浏览器中使用,因此必须等到主要浏览器支持。

加载器 AMD 正在变得过时,因为人们不使用它们,除了 webpack 之外,它已经获得了许多追随者,尽管 webpack 本身不是加载器,而是一个模块定义和资源打包器,具有许多实用程序和被框架使用 javascript 最常用(angular、vuejs、react)它最好的功能之一是开发服务器。

我觉得webpack发展的很好,它的目的不是加载模块,它是优化加载和开发,它是一个开发工具而不是像amd loaders那样的运行时库,所以它会继续很好地集成进入 ES2020,因为 ES 是一种规范,不能提供加壳者提供的工具。