javascript模块化怎么使用

其他教程   发布日期:2025年03月03日   浏览次数:153

这篇文章主要介绍“javascript模块化怎么使用”,在日常操作中,相信很多人在javascript模块化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascript模块化怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

先来一段八股文

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

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

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

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

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

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

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

实际工作中如何使用

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

来看看示例user.js

  1. import axios from '../utils/request'
  2. import md5 from 'md5'
  3. // 登录
  4. export const login = async (params)=>{
  5. let {data} = await axios.post('users/login',{params})
  6. if(data.success){
  7. // 在浏览器缓存中存储token
  8. sessionStorage.setItem('token',data.token)
  9. }
  10. return data
  11. }
  12. // 修改密码
  13. export const resetPwd = async (params)=>{
  14. // 要对密码加密
  15. let {data} = await axios.post('users/resetPwd',params)
  16. return data
  17. }
  18. //...other business

示例,goods.js

  1. export const getDetail = async (id)=> {
  2. let {data} = axios.get(`/goods/detail/${id}`);
  3. return data
  4. }
  5. export const getCategory = async () =>{
  6. let {data} = axios.get('/categories');
  7. return data
  8. }
  9. export const search = (params) =>{
  10. let {data} = axios.get('/search', { params });
  11. return data
  12. }

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

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

  1. import axios from '../utils/request'
  2. import md5 from 'md5'
  3. // 登录
  4. export const login = async (params)=>{
  5. let {data} = await axios.post('users/login',{params})
  6. if(data.success){
  7. // 在浏览器缓存中存储token
  8. sessionStorage.setItem('token',data.token)
  9. }
  10. return data
  11. }
  12. //查询商品
  13. export const search = (params) =>{
  14. let {data} = axios.get('/search', { params });
  15. return data
  16. }
  17. // 修改密码
  18. export const resetPwd = async (params)=>{
  19. // 要对密码加密
  20. let {data} = await axios.post('users/resetPwd',params)
  21. return data
  22. }
  23. //商品详情
  24. export const getDetail = async (id)=> {
  25. let {data} = axios.get(`/goods/detail/${id}`);
  26. return data
  27. }
  28. //获取商品分类
  29. export const getCategory = async () =>{
  30. let {data} = axios.get('/categories');
  31. return data
  32. }
  33. //...other business

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

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

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

附加几种模块化语法

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

1. CommonJS

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

  1. // math.js
  2. const add = (a, b) => a + b;
  3. const subtract = (a, b) => a - b;
  4. const hello = () => '千锋,你好';
  5. module.exports = {
  6. add,
  7. subtract,
  8. hello
  9. };
  10. // app.js
  11. const math = require('./math');
  12. console.log(math.add(2, 3)); // 输出 5
  13. console.log(math.subtract(3, 2)); // 输出 1
  14. console.log(math.hello); // 输出千锋,你好

2. AMD

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

  1. // 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.jsrequire(['./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 导入和导出模块。例如:

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

4. UMD

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

  1. (function (root, factory) {
  2. if (typeof define === 'function' && define.amd) {
  3. define(['exports'], factory);
  4. } else if (typeof module === 'object' && module.exports) {
  5. factory(module.exports);
  6. } else {
  7. factory((root.myModule = {}));
  8. }
  9. }(typeof self !== 'undefined' ? self : this, function (exports) {
  10. const add = (a, b) => a + b;
  11. const subtract = (a, b) => a - b;
  12. exports.add = add;
  13. exports.subtract = subtract;
  14. }));

以上就是javascript模块化怎么使用的详细内容,更多关于javascript模块化怎么使用的资料请关注九品源码其它相关文章!