为什么前端从简单的写html变成如今各种框架与模块,看起来如此复杂?

简介: 为什么前端从简单的写html变成如今各种框架与模块,看起来如此复杂?

目录


前言


本来是想记录一下npm的包管理,发现既然想要做个包管理介绍,肯定要先知道模块是什么,而谈到模块就想到,正是模块的思想让我们现在的前端看起来如此复杂,框架离不开依赖包,而依赖包管理也就是一个个逐渐封装起来的模块而已,它们看起来复杂,却带领前端走向新的时代,我们谈谈模块,谈谈我们现在所说的框架到底是什么。


模块是什么


大概就是将比较庞大的东西分割成一个个部分,而我们编写js,当然是将复杂的js代码分成多个js,所以不严谨的说,就是一个js文件就是一个模块。

为什么需要分割出模块?假设我们有一个方法是某种复杂的算法,这个算法在很多文件中都需要用到,如果不将这个方法写成一个模块的话,你就需要在不同文件中每次使用时编写一遍该算法,显然模块就是为了消除这种冗余的代码,将可能会重复的代码内容封装成一个模块。


模块的导出与导入



既然分出了模块,那模块与模块之间又是如何工作呢,必须要有东西将它们串起来,用es6的模块为例,也就是我们的导入import与导出export。

导出


我们写好一个count对象,count中间有两个我们写好的简单加减方法,使用export default暴露出去。

这里涉及到es6模块的两种导出方式,一种是默认导出export default,默认导出只能导出一次,当导入时就没有用花括号获取到的就是默认导出的唯一内容。

另一种就是直接export导出属性,可以导出任意个,需要在声明属性的同时导出或者使用花括号导出.

下面这样导出的结果等于,导出一个默认的count与一个包含所有直接导出属性的集合对象{ add, del, add2, del2 }

//count.js
const count = {
  add: (a, b) => {
    return a + b;
  },
  del: (a, b) => {
    return a - b;
  },
};
export const add = Count.add;
export const del = Count.del;
const add2 = count.add
const del2 = count.del
export const { add2, del2 };

导入

  1. 导入时,使用import count from "./count.js"可以获取到export default默认导出的东西,也就是count。
  2. 如果需要获得直接导出的属性,得需要用花括号{}
//test.js
import count, { add, del } from "./count.js";
console.log(Count.add(1, 2));//3
console.log(add(1, 2));//3
console.log(del(1, 2));//-1

依赖关系与依赖包管理


上面的例子中我们可以知道,我们封装了count模块,用于做计算,而test模块需要导入count,它依赖于count,如果count这个东西不存在,那test便无法正常工作了。

那假设我将count做的更强大,并非只是简单的加减法,然后将它发布为npm包供人下载,他们使用npm下载完我们的count包,导入我们的模块它们就可以使用了,这也就是依赖包管理的由来。

为什么模块让我们的前端变得复杂


而现在很多流行的前端框架,比如我们编写react代码时,需要import ... from 'react',会发现它也是封装好的模块作为依赖包。

这些流行的框架其实都是js,利用js可以生成dom的原理,设计出了他们的虚拟dom,因此我们前端从简单的html变成了复杂的项目,需要下载一堆包。

它们看起来是变得复杂了,但是它们的诞生让前端迈入了新的时代,能做的事情更多也更容易。好比我们从自行车换成了汽车,汽车肯定比自行车来的庞大内部结构也更加复杂,但是它的确能让我们到目的地的速度变快,现在我们使用react编写项目时,我们更在乎的是如何使用react编写出项目,而不是react是如何被编写出来的,当然我们仍然需要抱着一颗好学的心,不断尝试去了解它的原理。

我们编写前端项目需要依赖于这些框架的包,而这些框架也有它们运行时需要依赖的包,技术力提升是一个踩在过去巨人肩膀上不断上升的过程,我们不停探索原理,不断去找寻巨人脚底下的更大的巨人时必然发现自己如此渺小。


相关文章
|
7月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
650 1
|
8月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
510 70
|
8月前
|
JavaScript 前端开发 API
|
8月前
|
移动开发 前端开发 安全
|
10月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
483 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
10月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
283 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
8月前
|
前端开发
|
8月前
|
前端开发 JavaScript
|
11月前
|
移动开发 前端开发 搜索推荐
《前端技术基础》第01章 HTML基础【合集】
超文本标记语言(HyperText Markup Language,简称 HTML)是构建网页结构的基础标记语言。它与 CSS、JavaScript 协同,负责搭建网页“骨架”,用标签组织内容,像标题、段落、图片等元素,通过起始与结束标签(部分可单用,如`<img>`)界定层级与布局,将信息有序整合。标签含特定语义,向浏览器传达展示方式,为网页准确呈现及后续美化、交互筑牢根基。
299 25
|
12月前
|
人工智能 前端开发 JavaScript
前端基础之HTML
Web1.0、Web2.0 和 Web3.0 标志着互联网发展的三个阶段。Web1.0(静态互联网,1990年代初至2000年代初)以静态内容和单向信息流为主,用户仅能浏览。Web2.0(互动互联网,2000年代初至2010年代初)引入了用户生成内容和社交网络,内容动态且互动性强。Web3.0(语义互联网,2010年代至今)强调语义化、个性化、智能化及去中心化,结合AI、区块链等技术,提供沉浸式体验。HTTP和HTML作为互联网基础协议和技术,在各阶段不断演进,共同推动了现代互联网的发展。
前端基础之HTML

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    522
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    196
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    192
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    147
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    252
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    366
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    160
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    96
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    166
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    229