Vue学习——webpack

103 阅读3分钟

前端工程化

image.png

模块化:js代码模块化

组件化:UI结构、样式组件化

webpack的基本使用

创建列表隔行变色项目:

image.png

image.png

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./index.js"></script>
</head>
<body>
    <ul> <!-- 输入 ul>li{这是第 $ 个 li}*9 可快速生成-->
        <li>这是第 1 个 li</li>
        <li>这是第 2 个 li</li>
        <li>这是第 3 个 li</li>
        <li>这是第 4 个 li</li>
        <li>这是第 5 个 li</li>
        <li>这是第 6 个 li</li>
        <li>这是第 7 个 li</li>
        <li>这是第 8 个 li</li>
        <li>这是第 9 个 li</li>
    </ul>
</body>
</html>
// 1.使用ES6导入语法,导入jQuery
import $ from 'jquery'

// 2.定义jQuery的入口函数
$(function() {
    // 3.实现奇偶行变色
    // 奇数行为红色
    $('li:odd').css('background-color', 'red')
    // 偶数行为粉色
    $('li:even').css('background-color', 'pink')
})

效果:

image.png

代码有兼容性问题,网页跑不起来

安装和配置webpack

  1. 在项目中安装webpack

    image.png

    image.png

    npm install 包 -S-S 是 --save的简写, 把安装的包记录在dependencies下,表示这个包在项目开发阶段和上线阶段都需要用到

    npm install 包 -D-D 是 --save-dev的简写,把安装的包记录在devDependencies下,表示这个包仅在项目开发阶段用到

  2. 在项目中配置webpack

    image.png

    image.png

了解mode可选值

image.png

指定webpack的entry和output

image.png

自定义打包的入口与出口

image.png

问题: 每一次修改源代码,都需要重新npm run dev打包才能看到效果

安装和配置webpack-dev-server这个插件

image.png

  1. 安装

    image.png

    安装有个坑点:

    容易附带安装不兼容版本的webpack-cli, 从而导致最后运行webpack serve时报错,无法成功启动webpack-dev-server

    最稳妥的安装方法:

    先清理掉可能存在的原有版本:

    npm uninstall webpack-cli

    npm uninstall webpack-dev-server

    再安装我已验证可以成功使用的版本:

    npm install webpack-dev-server@3.11.2 -D

    npm install webpack-cli@4.10.0 -D

    安装完成后, package.json文件中的devDependencies中各个包的版本应该如此:

    image.png

  2. 配置

    image.png

    配置完成后,会发现即使控制台中显示发生了热加载,但通过http访问页面还是没有变化。原因如下:

    image.png

    控制台中显示输出文件是在根目录,但其实我们在根目录中根本没有发现bundle.js这一输出文件,是因为webpack-dev-server为了热加载的高效(快速),将生成文件存放在内存中了,而不是频繁往磁盘写入。

    根目录中看不到bundle.js文件(不在磁盘中):

    image.png

    尝试在根目录访问bundle.js文件(但在内存中):

    image.png

    所以我们为了方便看到热加载效果,作以下更改:

    image.png

介绍webpack-dev-server的工作原理

热加载的生成文件在内存中,不写入磁盘,提高热加载效率

安装和配置html-webpack-plugin这个插件

  1. 安装

    运行如下命令安装: npm install html-webpack-plugin@5.3.2 -D

    作用是把指定的目录中的文件复制一份放到根目录中

  2. 配置

    image.png

了解html-webpack-plugin插件的特性

解惑html-webpack-plugin

image.png

了解devServer中常用的选项

image.png

说明loader的作用

image.png

loader的调用过程:

image.png

打包处理css文件:

image.png

了解loader调用的过程 与 打包处理css文件

image.png

image.png

打包处理less文件

less文件:

image.png

image.png

回顾base64的图片优缺点

image.png

使用base64可以减少不必要的网络请求

演示图片loader加载的问题

打包处理样式表中与url路径相关的文件

image.png

介绍webpack处理样式的过程

url-loader的limit选项

打包处理js文件中的高级语法

image.png

安装babel-loader相关的包

image.png

配置babel-loader

image.png

配置build命令

配置webpack的打包发布

image.png

优化图片和js文件的存放路径

生成的目录结构很乱:

image.png

把JavaScript文件统一生成到js目录中:

image.png

把图片文件统一生成到image目录中:

修改webpack.config.js中的url-loader配置项,新增outputPath选项即可指定图片文件的输出路径

image.png

配置和使用clean-webpack-plugin插件自动删除dist目录

自动清理dist目录下的旧文件

image.png

总结发布的主要流程

SourceMap —— 开发模式下如何配置SourceMap

image.png

问题: image.png

解决方法:

image.png

SourceMap —— 在发布项目的时候出于安全性考虑建议关闭SourceMap

image.png

SourceMap —— SourceMap的最佳实践

只定位行数不暴露源码:

image.png

定位行数且暴露源码:

image.png

最佳实践: image.png

拓展——讲解webpack中@的原理和好处

实际开发中需要自己配置webpack吗?

image.png