Webpack入门:一、初识Webpack

126 阅读3分钟

一、webpack是什么?

官方对webpack的解释是用于编译 JavaScript 模块。通俗来说就是:找出模块之间的依赖关系,按照一定的规则把这些模块组织、合并为一个 JavaScript 文件。

webpack认为一切都是模块,包括 JS 文件、 CSS 文件以及图片等资源,都是模块。webpack的本质工作就是将这些所有模块合并为一个 JS 文件,此外我们也可以通过一个规则或工具改变webpack打包的方式,以改变最终打包生成的文件。后面会学习一些规则和工具来改变和扩展webpack的工作。

二、安装webpack

2.1 安装 Node.JS

使用webpack需要先安装Node.js,需要安装Node.js高于10.13.0的版本。

2.2 安装webpack

这里选择本地安装,首先新建个npm项目,然后在项目根目录执行:

npm i webpack webpack-cli --save-dev

上面的命令会安装最新版本的 webpack 和 webpack-cli,因为自 webpack4 开始,webpack将webpack-cli分离开了,需要单独安装。

然后配置 package.json 文件的 scripts字段:

"scripts": {
    "dev": "webpack"
  },

三、尝试webpack

3.1 ES6 module 存在的问题

在新建的 npm 项目新建 a.jsb.jsindex.html,目前项目目录文件组织如下:

image.png

各文件内容如下:

a.js

import { year } from './b.js'
console.log(year);

b.js

export var year = 2023;

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="a.js"></script>
</head>
<body>
</body>
</html>

然后我们打开 index.html 之后会发现控制台报错:

image.png 这是因为浏览器默认会将 module 的模块语法当做普通 js 引入,我们需要给 script 标签指定type="module" 属性,这样浏览器才会将其作为 module 模块导入,像下面这样修改 index.html 文件,就不会报错了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="module" src="a.js"></script>
</head>
<body>
</body>
</html>

没有报错:

image.png

3.2 尝试webpack打包

针对 ES6 module 模块化语法存在的问题,我们在上面通过给 script 标签添加type="module" 属性解决了该问题,下面我们通过webpack命令行打包解决这个问题。

首先,我们在项目根目录新建webpack.config.js文件:

image.png

并写入以下内容:

var path = require ('path');
 module.exports = {
    entry: './a.js',
    output: {
        path: path.resolve(__dirname, ''),
        filename: 'bundle.js'
    },
    mode: 'none'
 };

在上面的文件中,我们将a.js作为入口文件开始打包,将打包后的资源输出到当前目录下的bundle.js文件中。通俗点说就是将 a.js 文件和其依赖的 b.js 文件打包合并成一个新文件 bundle.js。文件中配置项具体作用后面会有文章深入讲解,这里只需要知道我们做了什么即可。

最后,我们将 index.html 文件中的 script 标签内的文件换成 bundle.js 即可:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="module" src="bundle.js"></script>
</head>
<body>
</body>
</html>

最终结果依旧正常输出到控制台:

image.png

四、总结

本文主要介绍了以下几点内容:

  1. webpack是什么,做什么的:Webpack是一个开源的 JavaScript 模块打包工具,主要用来将多个JavaScript文件和其他资源(如 CSS、图片、字体等)捆绑在一起,以便在浏览器中加载,Webpack的主要目的是优化前端开发的资源管理和加载速度。
  2. 尝试了webpack的打包流程。

本文引用了以下书籍或文章:

《Webpack与Babel入门详解》