JavaScript 模块化基础指引

目录

一、模块化概念

二、模块化优势

2.1 防止命名冲突

2.2 代码复用

2.3 高维护性

三、ES6 模块化语法

3.1 暴露语法汇总

3.1.1 分别暴露

3.1.2 统一暴露

3.1.3 默认暴露

3.2 export 和 export default 的区别

3.2.1 导出对象类型

3.2.2 使用次数限制

3.2.3 导入语法差异

3.2.4 使用限制

3.3 引入暴露文件语法

3.3.1 通用方式

3.3.2 解构赋值

3.3.3 简易形式

3.4 建立入口文件形式


一、模块化概念

模块化是一种将大型程序文件分解为多个小文件,再将这些小文件组合起来的编程理念。通过把复杂的程序逻辑拆分成一个个功能相对独立的模块,使得代码结构更清晰,便于管理和维护。在 JavaScript 中,每个模块就是一个独立的文件,包含了实现特定功能的代码,这些模块之间通过导入(import)和导出(export)机制进行交互。

二、模块化优势

2.1 防止命名冲突

在大型项目中,不同功能模块可能会使用相同名称的变量、函数等标识符。模块化使得每个模块都有自己独立的作用域,避免了这些命名冲突的发生,保证了代码的稳定性和可靠性。例如,在一个电商项目中,用户模块和订单模块都可能需要使用id来标识数据,但由于模块化,它们的id变量不会相互干扰。

2.2 代码复用

模块化允许开发者将常用的功能代码封装在模块中,其他模块可以方便地引用和复用这些代码,减少了重复编写相同代码的工作量,提高了开发效率。比如,在多个项目中都需要进行日期格式化的功能,就可以将日期格式化的代码封装成一个模块,在不同项目中直接引用。

2.3 高维护性

当项目需要对某个功能进行升级或修改时,由于模块化的特性,可以直接针对相应的模块进行操作,而不会对其他模块产生不必要的影响,降低了维护成本,提高了项目的可维护性。例如,当需要修改用户登录模块的验证逻辑时,只需要在用户登录模块中进行修改,而不会影响到其他模块的正常运行。

三、ES6 模块化语法

3.1 暴露语法汇总

3.1.1 分别暴露

在模块文件中,通过export关键字直接声明需要暴露的变量、函数等。以m1.js为例:

export let school = 'bdqn';

export function teach() {

    console.log("我们可以教给你开发技能");

}

这种方式适用于需要单独暴露多个成员的场景,使用起来直观明了。

3.1.2 统一暴露

先在模块内部定义好变量、函数等,然后使用export将需要暴露的内容用花括号包裹起来统一导出。比如在m2.js中:

let school = 'bdqn';

function findJob() {

    console.log("我们可以帮助你找工作!!");

}

export {school, findJob};

这种方式适合在模块内部先完成所有定义,最后统一管理暴露内容的情况。

3.1.3 默认暴露

使用export default暴露一个对象、函数等。在m3.js中:

export default {

    school: 'bdqn',

    change: function() {

        console.log("我们可以改变你!!");

    }

}

一个模块只能有一个默认暴露,它适用于模块主要提供单一功能或核心功能的场景。

3.2 export 和 export default 的区别

3.2.1 导出对象类型

二者均可用于导出常量、函数、文件、模块等。例如:

// export导出常量

export const num = 10;

// export default导出函数

export default function () {

    console.log('默认导出的函数');

}
3.2.2 使用次数限制

在一个文件中,export可以多次使用,用于分别暴露多个成员;而export default只能使用一次,因为一个模块只能有一个默认导出。

3.2.3 导入语法差异

通过export输出的内容,在import导入时需要使用花括号将导入的成员括起来,如:

import { school, teach } from "./js/m1.js";

export default导出的内容,在导入时不需要花括号,如:

import m3 from "./js/m3.js";

这种差异使得导入代码更加简洁直观。

3.2.4 使用限制

exportexport default不可同时使用在同一个导出操作中,否则会导致语法错误。

3.3 引入暴露文件语法

3.3.1 通用方式

采用import * as 别名 from '模块路径'的形式,将模块所有内容导入并通过别名访问。例如:

import * as m1 from './js/m1.js'

可以通过m1.schoolm1.teach()等方式访问m1.js模块中暴露的成员。这种方式适用于需要访问模块中多个成员,但又不想逐个导入的情况。

3.3.2 解构赋值

使用import { 变量名, 函数名 } from '模块路径'直接获取模块中指定内容,如:

import { school, teach } from "./js/m1.js";

还可以使用别名进行导入,如:

import {school as yyzx, findJob} from "./js/m2.js"

m2.js中的school以别名yyzx导入。对于默认暴露,采用import {default as 别名} from '模块路径',如:

import {default as m3} from "./js/m3.js";

这种方式灵活性高,能精准获取所需模块成员。

3.3.3 简易形式

针对默认暴露,可使用import 别名 from '模块路径',如:

import m3 from "./js/m3.js"

这种方式最为简洁,适用于明确知道模块是默认暴露且只需要使用默认导出内容的场景。

3.4 建立入口文件形式

在开发中,常创建一个入口文件(如app.js)来统一管理模块引入。在app.js中使用import语句引入多个模块,如:

import * as m1 from "./m1.js";

import * as m2 from "./m2.js";

import * as m3 from "./m3.js";

然后在 HTML 文件(如index.html)中通过<script src="./js/app.js" type="module"></script>引入入口文件,从而实现整个模块化程序的运行。这种方式使得项目的模块结构更加清晰,便于管理和维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值