# 一些补充
# 模块化
我们之前提到代码没有模块化之前会碰到一些问题,比如 项目一大,无法合理的管理项目的依赖和版本、无法方便的控制依赖的加载顺序等,这里我们举一个例子:
首先我们建一个 index.html :
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模块化问题例子</title>
</head>
<body>
<p>网页内容</p>
<div id='root'></div>
<script src='./index.js'></script>
</body>
</html>
一个 index.js:
var dom = document.getElementById('root');
var content = document.createElement('div');
content.innerText = '文章内容';
dom.append(content);
网页上会如图所示:
当我们的项目渐渐的大起来的时候,增加了各种各样的功能,比如我们要加一个 header,加一个 sidebar,我们便会在 index.js 中这样写:
var dom = document.getElementById('root');
var header = document.createElement('div');
header.innerText = '头部内容';
dom.append(header);
var sidebar = document.createElement('div');
sidebar.innerText = '侧边栏内容';
dom.append(sidebar);
var content = document.createElement('div');
content.innerText = '文章内容';
dom.append(content);
这个时候我们就会想把这个文件进行拆分:我们拆成 三个文件 header.js、content.js、sidebar.js,并在 index.js 中进行调用
// header.js
function Header() {
var header = document.createElement('div');
header.innerText = '头部内容';
dom.append(header);
}
// content.js
function Content() {
var content = document.createElement('div');
content.innerText = '文章内容';
dom.append(content);
}
// sidebar.js
function Sidebar() {
var sidebar = document.createElement('div');
sidebar.innerText = '侧边栏内容';
dom.append(sidebar);
}
// index.js
var dom = document.getElementById('root');
new Header();
new Sidebar();
new Content();
将这些 js 在我们的 html 中引用一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模块化问题例子</title>
</head>
<body>
<p>网页内容</p>
<div id='root'></div>
<script src='./header.js'></script>
<script src='./sidebar.js'></script>
<script src='./content.js'></script>
<script src='./index.js'></script>
</body>
</html>
页面如图所示:
但是到这里我们会发现几个问题,一个是当我们在 index.js 文件中使用 Header 等组件的时候,我们不知道这个构造函数定义在哪一个文件里面,还是要回到 html 中去查看;另外一个问题就是我们不能随意修改index.html 文件中 js 的引用顺序,比如我们将 index.js 放在 content.js 之前的时候,页面就会出现这样的报错。
这个就是我们最初提到的项目没有模块化的一些问题,项目一大,依赖会越来越难以管理,也不能随意更改以来的顺序。
这里我们就会想到如果在 index.js 中可以这样引用模块,问题就基本上解决了:
// ES Moudule 模块引入方式
import Header from './header.js';
import Sidebar from './sidebar.js';
import Content from './content.js';
new Header();
new Sidebar();
new Content();
我们既能在 这个文件中知道 依赖的文件地址,并且这里面的顺序调换也不会影响到我们程序的运行,但是很遗憾,这段代码无法直接在浏览器上面直接运行。
所以在这里我们就需要用到 webpack
我们在项目根目录中运行:
npm init // 一路回车到底
npm install webpack webpack-cli -D // 安装 webpack 依赖
npx webpack index.js
执行完这些命令之后,项目根目录下会直接生成 一个 dist 文件夹,我们修改一下 index.html 引入的 js,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模块化问题例子</title>
</head>
<body>
<p>网页内容</p>
<div id='root'></div>
<script src='./dist/main.js'></script>
</body>
</html>
这样页面中就又正常显示了三个内容,如下图所示:
这个就是最最基础的用 webpack 打包 js 的例子,深入的内容,我们之后会慢慢讲到的。
# 相关链接
# 示例代码
示例代码可以看这里:
← 安装webpack Webpack 配置 →