webpack常用插件

举报
兮动人 发表于 2022/05/26 15:44:01 2022/05/26
【摘要】 1. webpack 插件的作用 2. webpack-dev-server 2.1 安装 webpack-dev-server 2.2 配置 webpack-dev-server 2.3 打包生成的文件哪儿去了? 2.4 生成到内存中的文件该如何访问? 3. html-webpack-plugin 3.1 安装 html-webpack-plugin 3.2 配置 html-webpac...

1. webpack 插件的作用

  • 通过安装和配置第三方的插件,可以拓展 webpack 的能力,从而让 webpack 用起来更方便。最常用的webpack 插件有如下两个:

webpack-dev-server
类似于 node.js 阶段用到的 nodemon 工具
每当修改了源代码,webpack 会自动进行项目的打包和构建

html-webpack-plugin
webpack 中的 HTML 插件(类似于一个模板引擎插件)
可以通过此插件自定制 index.html 页面的内容

2. webpack-dev-server

  • webpack-dev-server 可以让 webpack 监听项目源代码的变化,从而进行自动打包构建。

2.1 安装 webpack-dev-server

  • 运行如下的命令,即可在项目中安装此插件:
npm install webpack-dev-server@3.11.2 -D

2.2 配置 webpack-dev-server

① 修改 package.json -> scripts 中的 dev 命令如下:

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

② 再次运行 npm run dev 命令,重新进行项目的打包

在这里插入图片描述

③ 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果

  • 注意:webpack-dev-server 会启动一个实时打包的 http 服务器
    在这里插入图片描述

  • 只要修改代码,就会被这个插件所监听到
    在这里插入图片描述

2.3 打包生成的文件哪儿去了?

① 不配置 webpack-dev-server 的情况下,webpack 打包生成的文件,会存放到实际的物理磁盘上
⚫ 严格遵守开发者在 webpack.config.js 中指定配置
⚫ 根据 output 节点指定路径进行存放
② 配置了 webpack-dev-server 之后,打包生成的文件存放到了内存中
⚫ 不再根据 output 节点指定的路径,存放到实际的物理磁盘上
⚫ 提高了实时打包输出的性能,因为内存比物理磁盘速度快很多

  • 所以在配置了打包插件后,根目录文件下看不到生成的 bundle.js (本质上是main.js,打包插件把main.js 加载到内存当中改名为 bundle.js),但能访问到,这是因为存放到内存当中了
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.4 生成到内存中的文件该如何访问?

webpack-dev-server 生成到内存中的文件,默认是放到了项目的根目录中,而且是虚拟的、不可见的。
⚫ 可以直接用 / 表示项目根目录,后面跟上要访问的文件名称,即可访问内存中的文件
⚫ 例如 /bundle.js 就表示要访问 webpack-dev-server 生成到内存中的 bundle.js 文件

  • 所以把 index.html 引入内存中的 bundle.js (本质还是 /dist/main.js
    在这里插入图片描述

  • 把 index.js 改成 红 黑 交替
    在这里插入图片描述

  • 访问 http://localhost:8080/src/,发现可以实时变化
    在这里插入图片描述

3. html-webpack-plugin

  • html-webpack-plugin 是 webpack 中的 HTML 插件,可以通过此插件自定制 index.html 页面的内容。
  • 需求:通过 html-webpack-plugin 插件,将 src 目录下的 index.html 首页,复制到项目根目录中一份。

3.1 安装 html-webpack-plugin

  • 运行如下的命令,即可在项目中安装此插件:
npm install html-webpack-plugin@5.3.2 -D

3.2 配置 html-webpack-plugin

在这里插入图片描述

3.3 解惑 html-webpack-plugin

① 通过 HTML 插件复制到项目根目录中的 index.html 页面,也被放到了内存中

  • 运行 npm run dev 后,在 8080 端口下就能直接访问到项目中的 index.html
    在这里插入图片描述

  • 访问根路径下的 src 目录,也能访问到项目,说明 html-webpack-plugin 把 src 下的 index.html 文件复制一份到根路径下了
    在这里插入图片描述

  • 在根路径下并没有看到复制出的 index.html文件,说明被放到内存当中了
    在这里插入图片描述

② HTML 插件在生成的 index.html 页面,自动注入了打包的 bundle.js 文件

  • 把引入的 bundle.js 文件注释掉,但还能在页面中看到效果
    在这里插入图片描述
    在这里插入图片描述
  • 查看网页源代码,发现 html-webpack-plugin 插件会自动注入打包后的 bundle.js 文件,所以后面打包后就不需要手动注入 bundle.js 文件了
    在这里插入图片描述

4. devServer 节点

  • 在每一次打包后,都要手动打开浏览器输入 8080 端口才能看到页面,有点麻烦
  • webpack.config.js 配置文件中,可以通过 devServer 节点对 webpack-dev-server 插件进行更多的配置
    在这里插入图片描述

5. 完整的实例代码如下

在这里插入图片描述

  • index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="../dist/main.js"></script>-->
<!--    <script src="/bundle.js"></script>-->
</head>
<body>
    <ul>
        <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>
  • index.js
//1.使用 ES6 导入语法,导入 JQuery
import $ from 'jquery'

//2.定义JQuery的入口函数
$(function () {
    //3.实现奇偶数变色
    $('li:odd').css('background-color', 'red')
    $('li:even').css('background-color', 'pink')
})
  • package.json
{
  "name": "change-rows-color",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "webpack serve"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "jquery": "^3.6.0"
  },
  "devDependencies": {
    "html-webpack-plugin": "^5.3.2",
    "webpack": "^5.42.1",
    "webpack-cli": "^4.9.0",
    "webpack-dev-server": "^3.11.2"
  }
}
  • webpack.config.js
//1. 导入 HTML 插件,得到一个构造函数
const HtmlPlugin = require('html-webpack-plugin')
//2. 创建 HTML 插件的对象实例
const htmlPlugin = new HtmlPlugin({
    template: './src/index.html', //指定原文件存放路径
    filename: './index.html' //指定生成的文件的存放路径
})

//使用 node.js 中的导出语法,向外导出一个 webpack 的配置对象
module.exports = {
    //代表 webpack 运行的模式,可选值有两个, development  production
    mode: 'development',
    entry: path.join(__dirname, './src/index.js'), //打包入口文件的路径
    output: {
        path: path.join(__dirname, './dist'), //输出文件的存放路径
        filename: 'bundle.js' //输出文件的名称
    },
    plugins: [htmlPlugin], //通过 plugins 节点,使 htmlPlugin 插件生效
    devServer: {
        open: true, //初始打包完成后,自动打开浏览器
        host: '127.0.0.1', //实时打包所使用的主机地址
        port: 80 //实时打包所使用的端口号
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。