详解JavaScript模板化使文章更清晰的全过程
作者:善良的小乔
一. 主要概念
什么是模板化?
一句话解释:模块化就是把一大段代码拆分成一个个小文件(模块),每个模块独立工作,互相协作。
为什么要用模块化?
想象一下你写了一个 3000 行的大项目代码,如果所有变量、函数都写在一个文件里,会发生什么?
变量命名冲突,逻辑难以维护,重用困难或者团队协作容易踩雷。
因此,使用模块化解决了这些问题,带来了:
作用域隔离:模块里的变量不会影响外部。
按需加载:只加载用到的模块。
更容易维护:每个文件职责清晰。
方便复用:模块可以在不同项目中复用。
模块的基本特性
一个模块通常具备以下特点:
| 特性 | 含义 |
|---|---|
| 独立作用域 | 模块内部的变量不会影响其他模块 |
| 导出接口 | 模块暴露哪些内容给外部使用(如函数、常量) |
| 导入其他模块 | 模块可以引用别的模块的内容 |
二. 模块化的演变历史
1. 没有模块(最早)
<script> // 所有代码混在一个文件,全局变量污染严重 </script>
2. CommonJS(Node.js 专用)
// math.js
function add(a, b) {
return a + b;
}
module.exports = { add };
// main.js
const math = require('./math');
console.log(math.add(2, 3)); // 5特点:
同步加载模块(适用于服务器端)
require、module.exports
3. AMD / RequireJS(早期浏览器模块)
define(['math'], function (math) {
console.log(math.add(2, 3));
});特点:
支持异步加载模块
用于浏览器早期阶段
4. ES Modules(现代浏览器和 Node.js 支持)
// math.js
export function add(a, b) {
return a + b;
}
// main.js
import { add } from './math.js';
console.log(add(2, 3)); // 5特点:
浏览器和 Node.js 都支持
支持静态分析、tree shaking、异步加载
三. 常用导入导出语法(ES Module)
命名导出
// math.js
export const PI = 3.14;
export function square(x) { return x * x; }
// 使用
import { PI, square } from './math.js';默认导出
// logger.js
export default function log(msg) {
console.log(msg);
}
// 使用
import log from './logger.js';全部导入为命名空间
import * as utils from './math.js'; console.log(utils.square(4));
四. 示例
例题:构建一个模块化的计算器
题目描述:做一个简化版的模块化计算器项目,包含两个模块 + 一个主程序:
/calculator.js ← 数学计算模块 /logger.js ← 日志模块 /main.js ← 主程序模块
calculator.js:导出基本的加减乘除函数
// calculator.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
export function multiply(a, b) {
return a * b;
}
export function divide(a, b) {
return b !== 0 ? a / b : 'Cannot divide by zero';
}logger.js:导出默认的 log 函数
// logger.js
export default function log(message) {
console.log(`[Log] ${message}`);
} main.js:导入并使用模块
// main.js
import * as calc from './calculator.js';
import log from './logger.js';
const result = calc.multiply(4, 5);
log(`4 x 5 = ${result}`);
const result2 = calc.divide(10, 2);
log(`10 ÷ 2 = ${result2}`);详解
1. calculator.js:命名导出
// calculator.js
export function add(a, b) { ... }
export function subtract(a, b) { ... }
export function multiply(a, b) { ... }
export function divide(a, b) { ... }解释:
export function xxx就是命名导出导出多个功能函数,调用时可以按需导入
2. logger.js:默认导出
// logger.js
export default function log(message) {
console.log(`[Log] ${message}`);
}解释:
export default表示这是模块的默认输出一个模块只能有一个
default export默认导出在导入时可以重命名
3. main.js:导入模块并使用
import * as calc from './calculator.js';
import log from './logger.js';
const result = calc.multiply(4, 5);
log(`4 x 5 = ${result}`);解释:
import * as calc from './calculator.js'
表示把所有命名导出聚合成一个对象
calc使用时通过
calc.add()这样的方式调用
import log from './logger.js'
这是导入默认导出,不需要加花括号
名字可以自定义(默认导出 ≠ 名字必须叫 log)
模块导入导出方式总结

五. 总结
1. 模块是为了隔离作用域、组织代码
2.export 是导出,import 是导入
3. 命名导出可以多个,默认导出只有一个
4. 导入时你可以选择单独导入或整体打包成命名空间
以上就是详解JavaScript模板化使文章更清晰的全过程的详细内容,更多关于JavaScript模板化过程的资料请关注脚本之家其它相关文章!
