前端模块化概览

amd

require.js,
依赖前置,预先下载,立即执行
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script data-main="main.js" src="./require.js"></script>
</body>
</html>

main.js

// 入口模块
require(["utils"], function(utils) {
    const res = utils.add(1,2);
    console.log(res);
});

utils.js

// 工具模块
// require定义模块不需要return 而define需要。require定义的js别人引用不了,而define的可以(return了)
define(function () {
  return {
    add(x, y) {
      return x + y;
    }
  }
})

cmd

sea.js,
依赖就近,预先下载,延迟执行

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="./sea.js"></script>
    <script>
         seajs.use("./main.js")
    </script>
</body>
</html>

main.js

// 入口模块
define(function(require, exports, module) {
    const utils = require('./utils');
    const res = utils.add(1,2);
    console.log(res);
})

utils.js

// 工具模块
define(function(require, exports, module) {
  return {
    add(x, y) {
      return x + y;
    }
  }
})

amd和cmd区别

依赖前置 vs 依赖就近

// amd
define("module", ["utils"], function(utils) {
    setTimeout(()=>{
        console.log(utils);
    },3000)
});

// cmd
define(function(require, exports, module) {
    setTimeout(()=>{
        const utils = require('./utils.js');
        console.log(utils);
    },3000)
})

// 以上代码可以看到,cmd是什么时候用,什么时候引入进来。
// 而amd是预先一开始就要声明好(注入进来)

预先下载
如上代码,无论amd还是cmd,都是页面载入就开始请求所有的依赖,哪怕是amd,看起来像3s后请求,实际上,仍然是立马请求。这里和webpack的懒加载刚好对立

立即执行vs延迟执行
还是如上代码,utils的模块打印一句话的情况下,amd会立刻输出,即请求完成就执行模块内代码。
相比之下,cmd,只有在你require的时候,才会去执行模块内部代码
贴上utils代码如下

define(function(require, exports, module) {
    console.log('utils');
    return {
      uname:'utilsModule'
    }
})

esModule

前两者和esModule最大的不同是,一个是官方,一个是野生。哈哈,开个玩笑
最大的区别是:前者是动态引入,后者是静态编译。

参考:
https://zhaoda.net/webpack-handbook/module-system.html
https://blog.csdn.net/aitangyong/article/details/49280923

posted @   丁少华  阅读(38)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示