之前文章都分享的Java相关,今天就分享一篇前端技术文章,一起来看看今日前端技术文章吧~希望能够帮助到你!

模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。

一、先来一段八股文

模块化开发可以带来以下好处:

● 提高代码的复用性:模块化可以将代码划分成可重用的部分,降低代码的冗余和重复,提高代码的复用性。

● 简化代码的维护和调试:当一个软件系统变得越来越复杂时,进行模块化开发可以使得每个模块都相对独立,这样就可以方便地维护和调试每个模块,而不必考虑整个系统的复杂性。

● 提高代码的可读性:模块化可以使得代码更加结构化,清晰明了,从而提高代码的可读性和可维护性。

● 提高开发效率:模块化开发可以使得团队成员在不同模块上并行开发,从而提高开发效率。

● 降低项目的风险:模块化开发可以使得开发人员更加关注模块之间的接口和依赖关系,从而降低项目的风险。

● 总之,模块化开发是一种有效的软件开发模式,可以提高软件开发的质量、效率和可维护性,特别是在大型软件系统的开发中,模块化更是必不可少的。

二、实际工作中如何使用

场景一:在前后端交互的ajax请求中,对不同的请求进行分类,每一个种类的业务放到一个模块中,有用户相关的、商品列表相关的、订单相关的各种,为了使业务逻辑更加清晰,更改相关代码的时候,只需要找到对应的文件,用户相关的就去user.js修改,商品相关的就去goods.js修改等等,是不是清楚多了,这是不是好用多了?

来看看示例user.js

import axios from '../utils/request'
import md5 from 'md5'// 登录
export const login = async (params)=>{let {data} = await axios.post('users/login',{params})if(data.success){// 在浏览器缓存中存储token
    sessionStorage.setItem('token',data.token)}return data
}
// 修改密码
export const resetPwd = async (params)=>{// 要对密码加密let {data} = await axios.post('users/resetPwd',params)return data
}
//...other business

示例,goods.js

export const getDetail = async (id)=> {  let {data} =  axios.get(`/goods/detail/${id}`);
  return data
}export const getCategory = async () =>{  let {data} =  axios.get('/categories');
  return data
}export const search = (params) =>{  let {data} =  axios.get('/search', { params });
  return data
}

每个js(模块)都有自己的相关的代码,代码之间互不影响

如下代码所示,所有的请求都放到一个文件中,不分模块

import axios from '../utils/request'
import md5 from 'md5'// 登录
export const login = async (params)=>{  let {data} = await axios.post('users/login',{params})
  if(data.success){    // 在浏览器缓存中存储token
    sessionStorage.setItem('token',data.token)
  }
  return data
}
//查询商品
export const search = (params) =>{  let {data} =  axios.get('/search', { params });
  return data
}// 修改密码
export const resetPwd = async (params)=>{  // 要对密码加密
  let {data} = await axios.post('users/resetPwd',params)
  return data
}
//商品详情
export const getDetail = async (id)=> {  let {data} =  axios.get(`/goods/detail/${id}`);
  return data
}
//获取商品分类
export const getCategory = async () =>{  let {data} =  axios.get('/categories');
  return data
}//...other business

是不是很乱,这只是一点点业务,如果大一点业务系统,里面有百十个接口,如果不能按照模块划分,代码就会是一座屎山,多人协作会出问题、代码维护无从下手

场景二:大家都知道单页面应用程序,他的最大优势就是不用切换页面,对用户体验极好。例如vue常见的页面是头、尾、菜单不动,只有内容区域动,在dom中扣去一块旧的,换一块新的,这样看来,每一块都应该是独立存在的,也就是咱们常见的.vue文件,使用webpack将.vue文件转为.js文件,这个js就是一个模块化的文件,通过路由把页面和名字进行关联,扣掉和换上新的都需要操作路由来完成

总结一下,模块化其实就是分门别类

三、附加几种模块化语法

不管哪种语法,只是一种固定的写法,重点了解两个概念,一个导出(暴露当前模块),一个导入(用那个模块)

1. CommonJS:CommonJS 是一种用于服务器端 JavaScript 的模块化规范,使用 require 和 module.exports 导出和引入模块。例如:

// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const hello = () => '千锋,你好';module.exports = {  add,
  subtract,
  hello
};// app.js
const math = require('./math');console.log(math.add(2, 3)); // 输出 5
console.log(math.subtract(3, 2)); // 输出 1
console.log(math.hello); // 输出千锋,你好

2. AMD:AMD(Asynchronous Module Definition,异步模块定义)是用于浏览器端 JavaScript 的模块化规范,使用 define 定义模块,通过 require 异步加载模块。例如:

// math.js
//define第一个参数表示当前模块所依赖的模块,可以是一个字符串数组,也可以是一个函数
// 定义一个名为 "math" 的模块,依赖于 "jquery" 和 "underscore" 两个模块
define(['jquery', 'underscore'], function($, _) {  // 定义模块的功能
  const add = function(a, b) {    return a + b;
  };
  const multiply = function(a, b) {    return a * b;
  };
  const test = ()=>{    var arr = ['foo', 'bar', 'qfedu'];
    var arrUpper = _.map(arr, function(str) {      return str.toUpperCase();
    });
    return  arrUpper;
  }  // 导出模块的功能
  return {    add: add,
    multiply: multiply,
    test:test
  };
});// app.js
require(['./math'], function(math) {  console.log(math.add(2, 3)); // 输出 5
  console.log(math.subtract(3, 2)); // 输出 1
  console.log(math.test())//输出 ["FOO", "BAR", "QFEDU"]
});

3. ES6 模块:ES6 模块是 JavaScript 的官方模块化规范,使用 import 和 export 导入和导出模块。例如:

// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;// app.js
import { add, subtract } from './math';console.log(add(2, 3)); // 输出 5
console.log(subtract(3, 2)); // 输出 1

4. UMD:UMD(Universal Module Definition,通用模块定义)是一种支持多种模块化规范的通用模块化方案,它既支持 CommonJS,又支持 AMD 和全局变量。例如:

(function (root, factory) {if (typeof define === 'function' && define.amd) {define(['exports'], factory);} else if (typeof module === 'object' && module.exports) {factory(module.exports);} else {factory((root.myModule = {}));}
}(typeof self !== 'undefined' ? self : this, function (exports) {const add = (a, b) => a + b;const subtract = (a, b) => a - b;  exports.add = add;
  exports.subtract = subtract;
}));

好啦,今日的前端学习文章就分享到这儿,还有不懂的可以评论留言探讨~,关注小源,后台dd领取"前端项目教程"!

什么是前端模块化?为什么要进行模块化开发?前端技术文章分享相关推荐

  1. 前端开发群技术文章分享汇总

    2019独角兽企业重金招聘Python工程师标准>>> 今天推荐一个非常好的关于前端的资源,包含了前端的css,html,js,ui,面试,算法等等一系列你感兴趣的内容,小编认为真的 ...

  2. java的前端还是后端_java语言是开发前端还是后端的

    java语言是开发前端还是后端的 发布时间:2020-06-26 16:01:18 来源:亿速云 阅读:105 作者:Leah java语言是开发前端还是后端的?很多新手对此不是很清楚,为了帮助大家解 ...

  3. 前端html页面模块,页面模块化实现的条件和基本实现思路 – WEB前端开发

    页面模块化实现的很大的受制于页面的结构和表现:一个统一的页面结构和表现能很好的实现页面的模块话. 比如一个"网友评论"模块这个会在很多地方使用到,比如日志,照片,等等,如果这个&q ...

  4. 模块化规范CommomJS特性介绍_web前端培训

    1.4 基本语法 暴露模块:module.exports = value或exports.xxx = value 引入模块:require(xxx),如果是第三方模块,xxx为模块名:如果是自定义模块 ...

  5. 前端工程化、模块化方案教程大全,现代前端高手进阶必经之路(欢迎收藏)...

    关注掘金和github很久了,但是一直没有在上面发表什么文章,这次静下心来写了个前端的目前工程化与模块化方案的总结,后期会继续更新,为开源社区做出更大贡献. 前端的模块化方案从早年的require.j ...

  6. 1.(vue)前端模块化 2.(node)后端模块化

    在这里 有两个知识点1.(vue)前端模块化 2.(node)后端模块化 模块化: 所谓的模块化 就是把某块功能的代码 抽里成一个js文件 用到的时候直接引入当做函数一样的调用 这点我觉得有点像jav ...

  7. 豆瓣App的模块化实践 - CocoaChina_让移动开发更简单

    业务背景 豆瓣在 2014 年聚合了移动端业务,推出了一款叫"豆瓣"的App.随着豆瓣App 的发展,豆瓣越来越多的业务线被纳入其中.豆瓣App 代码量越来越多,功能越来越复杂,体 ...

  8. 【模块化】再谈模块化

    引言 一次又一次的事实证明,小的.组织好的代码远比庞大的代码更容易理解和维护. 因此,优化程序 的结构和组织方式,就是把它们分成小的.耦合度低的片段.我们把这样的片段,称为 模块. 模块 模块是比对象 ...

  9. 使用模块化工具Rollup打包自己开发的JS库

    使用模块化工具Rollup打包自己开发的JS库 打包JS库demo项目地址:https://github.com/Miazzy/xdata-utils-btools 背景 最近有个需求,需要为小程序写 ...

最新文章

  1. laravel5.4 关于数据填充的知识
  2. [development][PCRE] old PCRE
  3. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】
  4. PowerDesigner16建表在SQL SERVER 2008报 对象名 'sysproperties' 无效。
  5. 华为27asph是什么型号_上半年苹果全球销量第一,红米次之,华为表现不佳
  6. 我的osu游戏程序设计(oo)
  7. python写网页脚本_东拼西凑用python脚本登录web管理页面做巡检(实现)
  8. 前魅族副总裁李楠上手魅族17:颜值提升了
  9. hdu 4057(ac自动机+状态压缩dp)
  10. 微型计算机控制技术 高国琴,微型计算机控制技术论文集 微型计算机控制技术外文文献怎么找...
  11. shadow dom
  12. java 支付宝 验证签名失败,支付宝支付错误返回ILLEGAL_SIGN,签名验证错误
  13. 新浪微博开发平台接入流程(1)---注册应用
  14. 守卫解救acm_让作家阻止了它的解救
  15. 【安安教具】-【数学】-【一阶线性齐次方程】模拟器 教你如何用python制作一阶线性齐次方程模拟器 python项目小发明
  16. android 颜色color.xml文件及部分中英文对照
  17. UI设计师面试时必须注意的6大问题
  18. 卖家必看-跨境电商亚马逊、Lazada、shopee、速卖通、eBay、wish、Tik Tok、mercari、newegg测评(补单),深度解析高利润爆单打法
  19. oracle的快捷方式,键盘快捷方式
  20. Windows命令-wmic

热门文章

  1. Win11任务栏消息提醒功能如何开启教学
  2. Android实现圆形图像的两种方法(Glide和Picasso)
  3. 【UNR #6 B】机器人表演(DP)
  4. Java程序设计基础【4】
  5. 基于Logistic混沌序列和DNA编码的图像加解密算法仿真
  6. Auto.js中的悬浮窗
  7. 做数据分析需要学什么?这几项技能你掌握了吗?
  8. 从零开始大数据--Hadoop、HDFS、MapReduce、HBase、Hive
  9. 十五、《大数据项目实战之用户行为分析》HBase数据表操作
  10. LTSPICE使用教程:导入第三方库模型进行仿真