前端模块化
前端模块化
前言
在
理解模块化
模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突、管理依赖、提高代码的可读性、代码解耦以及提高代码的复用性。
描述
模块化开发其实就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能,同时也需要避免全局变量的污染,最初通过函数实现模块,实际上是利用了函数的局部作用域来形成模块。
1 | function func1(){ |
上述的func1
与func2
函数分别形成了两个模块,需要使用的时候直接调用即可,但是这样无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系,再之后便有使用对象作为模块,将成员的都放置于对象中。
模块化规范
CommonJS
1 | // 1.js,定义变量、函数等 |
1 | // 2.js 导入方式一 |
ES6
ES6
在语言标准的层面上实现了模块的功能,是为了成为浏览器和服务器通用的模块解决方案,ES6
标准使用export
与export default
来导出模块,使用import
导入模块
导出方式两种export
和 export default
export
能按需导入,export default
不行export
可以有多个,export default
仅有一个export
能直接导出变量表达式,export default
不行。export
方式导出,在导入时要加{}
,export default
则不需要。
1 | // 导出单个特性 |
1 | import defaultMember from "module-name"; |
1 | //常用的导出方式 |
引用JS文件
在引用JS文件时,需要给js添加type类型module,确保它是一个单独的模块
1 | <script src="./a.js" type="module" charset="utf-8"></script> |
前端模块化雏形
前端开发,代码逐渐复杂,开发人员越来重视模块化思想,模块化雏形是通过闭包的形式出现的
匿名闭包,解决了命名冲突问题,但是出现了代码不可复用性
1 | ;(function(){ |
通过obj对象导出
1 | //1.js文件 |
Webpack安装
本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部构建一个 依赖图(dependency graph),此依赖图对应映射到项目所需的每个模块,并生成一个或多个 bundle。
起步
webpack 用于编译 JavaScript 模块。一旦完成 安装,你就可以通过 webpack CLI 或 API 与其配合交互。如果你还不熟悉 webpack,请阅读 核心概念 和 对比,了解为什么要使用 webpack,而不是社区中的其他工具。
前提条件
在开始之前,请确保安装了 Node.js 的最新版本。使用 Node.js 最新的长期支持版本(LTS - Long Term Support),是理想的起步。 使用旧版本,你可能遇到各种问题,因为它们可能缺少 webpack 功能, 或者缺少相关 package。
本地安装
最新的 webpack 正式版本是:v5.37.1
要安装最新版本或特定版本,请运行以下命令之一:
1 | npm install --save-dev webpack |
是否使用
--save-dev
取决于你的应用场景。假设你仅使用 webpack 进行构建操作,那么建议你在安装时使用--save-dev
选项,因为可能你不需要在生产环境上使用 webpack。如果需要应用于生产环境,请忽略--save-dev
选项。
全局安装
通过以下 NPM 安装方式,可以使 webpack 在全局环境下可用:
1 | npm install --global webpack |
不推荐 全局安装 webpack。这会将你项目中的 webpack 锁定到指定版本,并且在使用不同的 webpack 版本的项目中, 可能会导致构建失败。
我在学vue的时候,是先安装全局的webpack,便于我在任何地方使用,也许以后开发项目,不能这样安装
学习webpack工具