首页 > 其他分享 >前端模块化概览

前端模块化概览

时间:2023-01-12 10:45:43浏览次数:48  
标签:return 模块化 前端 概览 require js utils amd define

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

标签:return,模块化,前端,概览,require,js,utils,amd,define
From: https://www.cnblogs.com/dingshaohua/p/17045768.html

相关文章

  • 高频前端面试题:什么是回调函数?
    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回......
  • 你知道,前端工程部署有哪些方式嘛?
    你知道,前端工程部署有哪些方式嘛?本文原文地址;此文章是回答知乎问题总结而来。我将其分为四个阶段:手动部署、命令工具部署、docker镜像部署、平台化部署。这几个阶段,越......
  • 前端面试题
    javascript1、请问截至目前JS中的基本数据类型有几种?A、5B、6C、7D、82、document对象模型中,节点类型一共有几种?A、4种......
  • 【HTML基础篇003】前端基础之CSS选择器大全
    ✨一、CSS的基本介绍CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素。当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。✨二、CSS......
  • 前端使用canvas实现贪吃蛇小游戏
    贪吃蛇是一款益智小游戏,通过点击上下左右四个按键控制蛇头移动。设计思路主要是设计蛇的身体和移动方法。将蛇的身体设置成一个数组,数组里存放蛇身每一节的xy坐标。游......
  • 前端知识点整理第二天(伪类和伪元素/html5语义化)
    SEO,也就是搜索引擎优化的逻辑,其实是非常简单的。这就像是在大学里的学生会主席,你要让投票者给你更多的选票。那么,你需要先「自我优化」,无论是外表还是能力;此外,你还需获得......
  • 前端分页和后端分页的区别,当后端返回的数据过多给前端时,前端会卡住不动,此时应该考虑后
    问题:这里返回给你600条数据 前端一直在打转,显示不出来?    原因:数据量太大了可能解决方法:改为后端分页就行  current当前页size每页显示条数 ......
  • 前端分页和后端分页
    前端分页和后端分页https://blog.csdn.net/baidongying/article/details/75448106?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Ede......
  • Redux与前端表格施展“组合拳”,实现大屏展示应用的交互增强
    Redux是JavaScript状态容器,提供可预测化的状态管理。它可以用在react、angular、vue等项目中,但与react配合使用更加方便一些。Redux原理图如下,可以看到store仓库......
  • 前端面试题与答案
    一、HTML+CSS部分()1、怎么让一个不定宽高的DIV,垂直水平居中?答:1)使用CSS方法:父盒子设置:display:table-cell;text-align:center;vertical-align:middle;Div设置:display:inline-blo......