代码之家  ›  专栏  ›  技术社区  ›  Chong Lip Phang

模块加载器在现代JavaScript中过时了吗?

  •  0
  • Chong Lip Phang  · 技术社区  · 4 年前

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

    // 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等,是否已经过时了?就我个人而言,我从未使用过它们。如果使用过它们的人告诉我今天是否绝对有必要使用它们来获得它们过去提供的好处,我将不胜感激。

    1 回复  |  直到 4 年前
        1
  •  0
  •   dgzornoza    4 年前

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

    我认为webpack进展得很好,它的目的不是加载模块,而是优化加载和开发,它是一个开发工具,而不是像amd loader那样的运行库,因此它将继续很好地集成到ES2020中,因为ES是一个规范,不能提供打包器提供的工具。

        2
  •  0
  •   Asutosh    4 年前

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