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

前端模块化

时间:2024-07-20 11:07:14浏览次数:8  
标签:function 模块化 前端 add 模块 var require 加载

前端模块化

将逻辑代码拆分成独立的块,各自封装,互相独立 前端模块化的目的:使代码更易于维护,测试和重构。提升代码的可复用性和开发效率 目前流行的js模块化规范:CommonJS,AMD,CMD,ES6模块化 ES6是静态加载,其他都是动态加载

1、CommonJS

CommonJS用同步的方式加载模块,适用于服务端编程。 在服务端,模块文件都存储在本地磁盘,读取非常快,所以这样做不会有问题,最佳应用node.js 在浏览器,由于网络原因,更合理的方案时异步加载 语法糖: 输入:require 输出:module.exports  
// 定义模块math.js
var basicNum = 0;
function add(a, b) {
  return a + b;
}
module.exports = { //在这里写上需要向外暴露的函数、变量
  add: add,
  basicNum: basicNum
}

// 引用自定义的模块时,参数包含路径,可省略.js
var math = require('./math');
math.add(2, 5);

// 引用核心模块时,不需要带路径
var http = require('http');
http.createService(...).listen(3000);

2、AMD

AMD规范采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行

AMD是依赖前置,提前执行(最佳实践RequireJS)

所有模块加载完成后才执行主逻辑,执行顺序a和b和开发人员写的不一样,那个模块网速好,先下载完就先执行

语法糖:

require.config()指定引用路径等

define()定义模块

require()加载模块

// 定义math.js模块
define(function () {
    var basicNum = 0;
    var add = function (x, y) {
        return x + y;
    };
    return {
        add: add,
        basicNum :basicNum
    };
});
// 定义一个依赖underscore.js的模块
define(['underscore'],function(_){
  var classify = function(list){
    _.countBy(list,function(num){
      return num > 30 ? 'old' : 'young';
    })
  };
  return {
    classify :classify
  };
})

// 引用模块,将模块放在[]内
require(['jquery', 'math'],function($, math){
  var sum = math.add(10,20);
  $("#sum").html(sum);
});

3、CMD

CMD是就近依赖,延迟执行(SeaJs)

模块加载完成后才执行主逻辑,执行顺序a和b和开发人员写的一样  
/** AMD写法 **/
define(["a", "b", "c", "d", "e", "f"], function(a, b, c, d, e, f) { 
     // 等于在最前面声明并初始化了要用到的所有模块
    a.doSomething();
    if (false) {
        // 即便没用到某个模块 b,但 b 还是提前执行了
        b.doSomething()
    } 
});

/** CMD写法 **/
define(function(require, exports, module) {
    var a = require('./a'); //在需要时申明
    a.doSomething();
    if (false) {
        var b = require('./b');
        b.doSomething();
    }
});

 

4、ES6模块化

在编译的时候确定依赖关系,以及输入输出变量

语法糖:

输入:import

输出:export

 

标签:function,模块化,前端,add,模块,var,require,加载
From: https://www.cnblogs.com/alisadream/p/18312869

相关文章

  • 前端必修技能:高手进阶核心知识分享 - CSS伪类和伪元素
    前端必修技能:高手进阶核心知识分享-CSS伪类和伪元素前端必修技能:高手进阶核心知识分享-CSS伪类和伪元素在前端的工作中,经常会遇到伪类和伪元素,但很多人(包括我自己)都没有仔细的去分辨它们,归其原因,大概是因为:写法相似。但其实,伪类和伪元素还是有很多不同的。温......
  • 前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!
    前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!首先聊下node.js的优缺点和应用场景Node.js的优点和应用场景Node.js作为后端开发的选择具有许多优点,以下是其中一些:高性能:Node.js采用了事件驱动、非阻塞I/O模型,使得它能够处理大量并发请求而不会阻塞线程,从而具有出色......
  • 前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!
    首先聊下node.js的优缺点和应用场景Node.js的优点和应用场景Node.js作为后端开发的选择具有许多优点,以下是其中一些:高性能:Node.js采用了事件驱动、非阻塞I/O模型,使得它能够处理大量并发请求而不会阻塞线程,从而具有出色的性能表现。轻量级和高效:Node.js的设计简洁而轻量,......
  • 前端性能优化
    减少请求数量【合并】如果不进行文件合并,有如下3个隐患1、文件与文件之间有插入的上行请求,增加了N-1个网络延迟2、受丢包问题影响更严重3、经过代理服务器时可能会被断开但是,文件合并本身也有自己的问题1、首屏渲染问题2、缓存失效问题......
  • vue2的老项目怎么改造为vue3,vite,前端的快速发展真让人上头
    Vue2Vue2是Vue.js的第二个主要版本,由尤雨溪于2016年发布。Vue2带来了许多新特性和改进,使其成为最受欢迎的前端框架之一。特点:响应式系统:Vue2的核心特性是响应式系统,它可以自动追踪依赖并在数据变化时更新DOM。组件化架构:Vue2鼓励开发者使用组件化的方式构......
  • Jenkins(一)前端构建代码
    #检查node版本node-v#检查npm版本npm-v #进入项目目录cd${project.path} #查看当前目录ls #设置为新的镜像npmconfigsetsass_binary_sitehttp://cdn.npm.taobao.org/dist/node-sass #设置npm的镜像源为淘宝镜像源为下面的yarn的安装加速n......
  • 前端开发个人职业发展的四个阶段,你处于哪里?
    前言前段时间跟一位前辈聊到前端职业发展该怎么去规划这个问题。他说到的其中几个点我觉得非常好:第一是要有清晰的自我认知,知道自己在一个团队或者在一个项目中能发挥怎样的价值,不骄傲自大也不要妄自菲薄;第二点是无论做什么都需要勇于承担,不要害怕任务艰巨自己无法完成,做得越......
  • 前端重学笔记-CSS篇-10
    一、HTML5新特性HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。声明:1.新特性增加了很多,但是我们专注于开发常用的新特......
  • 网站开发:使用VScode安装yarn包和运行前端项目
    一、首先打开PowerShell-管理员身份运行ISE输入命令:set-ExecutionPolicyRemoteSigned选择“全是”,表示允许在本地计算机上运行由本地用户创建的脚本,没有报错就行了二、接着打开VScode集成终端输入npminstall-gyarn再次输入以下命令,无报错说明yarn安装成功ya......
  • 前端WebSocket的方法封装
    一、封装方法在项目根目录src下的utils中新增webSocketManager.js封装文件,代码内容如下://webSocketManager.js/**WebSocketMessenger封装类*/classWebSocketManager{constructor(url=null,userId=null,receiveMessageCallback=null){this.socket=nul......