webpack打包构建工具的使用和相关的配置

news2024/12/24 0:13:18

目录

一、 webpack的基础使用步骤

二、webpack的配置

1、入口和出口

2、 webpack打包后自动生成html文件并自动引入打包后的js

3、加载器loader

        3.1、处理css文件

        3.2、处理less文件

         3.3、处理图片文件

        3.4、处理字体文字

        3.5、处理高版本js语法(降级)

4、代码变更,自动刷新打包(webpack开发服务器)


使用webpack部署之前先下载包管理器 yarn或 npm (建议下载至C盘)

        yarn 下载地址: https://yarn.bootcss.com/docs/install/#windows-stable

  • mac - 通过homebrew安装(看上面地址里)

    • mac如果没安装过homeBrew先运行这个命令

      /usr/bin/ruby -e "$(curl -fsSL http://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
      

        webpack是javascript 应用程序的 静态模块打包器 (module bundler)

                (作用:把很多文件打包整合到一起, 缩小项目体积, 提高加载速度 )

        webpack打包流程图

             

一、 webpack的基础使用步骤

在Vscode中文件夹下打开集成终端命令  (或者cmd命令)

1、初始化包环境  yarn init  (直接回车即可,之后可修改)

2、安装依赖包 yarn add webpack webpack-cli -D

3、在package.json中配置如下命令,(配置script 自定义命令)

"scripts": {
    "build": "webpack"
  }

使用:创建src > index.js  (固定文件)

  1. 新建src/add/add.js - 定义求和函数导出

    export const addFn = (a, b) => a + b
  2. 新建src/index.js导入使用

    import {addFn} from './add/add'
    console.log(addFn(10, 20));
  3. 运行打包命令  yarn build 或者 npm run build

        打包完成后,会生成默认的dist目录和打包后默认main.js文件,代码更新后,重新进行打包yarn build,也可通过配置,自动更新打包

二、webpack的配置

       1、入口和出口

(入口:从哪里开始打包,出口:打包完成后输出到哪里, webpack默认的入口是 ./src/index.js  , 默认出口是./dist/main.js)

        ①与src并列处,新建webpack.config.jswenjian

        ②填入配置项

const path = require("path")

module.exports = {
    entry: "./src/main.js", // 入口路径
    output: { 
        path: path.join(__dirname, "dist"), // 出口路径
        filename: "bundle.js", // 出口文件名
        clean: true, //下一次打包之前清除生成的dist文件夹
    }
}

        ③修改package.json文件, 自定义打包命令 - 让webpack使用配置文件

        

"scripts": {
    "build": "webpack"
},

之后yarn build 打包即可

2、 webpack打包后自动生成html文件并自动引入打包后的js

        ①下载插件  yarn add html-webpack-plugin  -D

        ②webpack.config.js配置

// 引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    // ...省略其他代码
    plugins: [
        new HtmlWebpackPlugin({
            template: './public/index.html' // 以此为基准路径生成打包后html文件
        })
    ]
}

        ③重新打包后观察dist下是否多出html并运行看效果

3、加载器loader

        loaders加载器, 可让webpack处理除js\json的其他类型的文件, 打包到js中

        3.1、处理css文件

        ①安装依赖   yarn add style-loader css-loader -D

        ②webpack.config.js 配置

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
    // ...其他代码
    plugins: [  //外链式css设置,内联不用
        new MiniCssExtractPlugin({
          filename: "./css/index.css",//将css打包在指定的文件中
        }),
      ],
    module: { 
        rules: [ // loader的规则
          {
            //匹配.css结尾的文件
            test: /\.css$/i,
            //执行顺序:从右到左
            //css-loader用来识别css文件并且打包
            //style-loader将css样式插入到DOM中

            // use: ["style-loader", "css-loader"], //此为内联式css
            use: [MiniCssExtractPlugin.loader, "css-loader"], //此为外链式css ,注意不用“”包裹
          },
        ]
    }
}

        ③如要去除css默认样式,新建src/css/index.css ,文件内

ul,li{
    list-style:none;
}

        需要引入到main.js文件内才能产生作用,(因为这里是入口需要产生关系, 才会被webpack找到打包起来 )

import "./css/index.css"  //因为设置了加载器,此时打包以及可以识别

        3.2、处理less文件

        ①下载依赖包   yarn add less less-loader -D

        ②webpack.config.js 配置

module: {
  rules: [ // loader的规则
    // ...省略其他
    {
    	test: /\.less$/,
    	// 使用less-loader, 让webpack处理less文件, 内置还会用less翻译less代码成css内容
        use: [ "style-loader", "css-loader", 'less-loader']
    }
  ]
}

        ③如要观察效果,src/less/index.less 

@size:24px;
ul, li{
    font-size: @size
}

        引入到main.js文件中,再进行打包命令yarn build

import "./less/index.less"

         3.3、处理图片文件

        如果是是webpack5版本的, 直接配置在webpack.config.js  的 rules[ ]里即可

{
    //打包大小临界值是8kb,小于8kb,将转换成base64格式的字符申,大于8kb,打包成独立的文件
    test: /\.(png|jpg|jpeg|gif|amp|webp)$/i,
    type: "asset",
     
    parser: {  //这里是修改临界值
        dataUrlCondition: {
            maxSize: 8 * 1024, // 8kb
        },
    },
},

        如果是webpack4及以前的, 请使用这里的配置

                ①下载依赖包    yarn add url-loader file-loader -D

                ②webpack.config.js 配置

{
  test: /\.(png|jpg|gif|jpeg)$/i,  //图片格式
  use: [
    {
      loader: 'url-loader', // 匹配文件, 尝试转base64字符串打包到js中
      // 配置limit, 超过8k, 不转, file-loader复制, 随机名, 输出文件
      options: {
        limit: 8 * 1024,
      },
    },
  ],
}

        ③使用:src/assets/准备2个图片文件、

                在css/less/index.less - 把小图片用做背景图

body{
    background: url(../assets/logo_small.png) no-repeat center;
}

                在src/main.js - 把大图插入到创建的img标签上, 添加body上显示

// 引入图片-使用
import imgUrl from './assets/1.gif'
const theImg = document.createElement("img")
theImg.src = imgUrl
document.body.appendChild(theImg)

·url-loader 把文件转base64 打包进js中, 会有30%的增大, file-loader 把文件直接复制输出

        3.4、处理字体文字

 如果是是webpack5版本的, 直接配置在webpack.config.js  的 rules[ ]里即可

{
        test: /\.(woff|woff2|eot|svg|ttf|otf)$/i,
        type: "asset/resource",
        generator: {
          //指定打包之后的文件名,防止命名冲突
          filename: "font/[name].[hash:6][ext]", //[hash:6]6位随机数
        },
      },

    如果是webpack4及以前的, 请使用这里的配置

                ①下载依赖包    yarn add url-loader file-loader -D

                ②webpack.config.js 配置

 { // 处理字体图标的解析
     test: /\.(eot|svg|ttf|woff|woff2)$/,
         use: [
             {
                 loader: 'url-loader',
                 options: {
                     limit: 2 * 1024,
                     // 配置输出的文件名
                     name: '[name].[ext]',
                     // 配置输出的文件目录
                     outputPath: "fonts/"
                 }
             }
         ]
 }

                ③使用:   src/assets/ - 放入字体库fonts文件夹

                在main.js引入iconfont.css

// 引入字体图标文件
import './assets/fonts/iconfont.css'

                在public/index.html使用字体图标样式

<i class="iconfont icon-weixin"></i>

·url-loader和file-loader 可以打包静态资源文件

        3.5、处理高版本js语法(降级)

让webpack对高版本的js代码, 降级处理后打包,以达到更好的兼容性

        ①安装依赖包    yarn add -D babel-loader @babel/core @babel/preset-env

        ②配置规则

module: {
  rules: [
        //省略其他
    {
        test: /\.m?js$/,
        exclude: /(node_modules|bower_components)/, //排除这些文件中的.js文件
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env"], //预设降级规则,用这个包里面的降级规则去降级
          },
        },
      },
  ]
}

③使用: 在main.js中使用箭头函数(高版本js)

// 箭头函数为高级语法
const fn = () => {
  console.log("你好babel");
}
console.log(fn) // 这里必须打印不能调用/不使用, 不然webpack会精简成一句打印不要函数了/不会编译未使用的代码
// 没有babel集成时, 原样直接打包进lib/bundle.js
// 有babel集成时, 会翻译成普通函数打包进lib/bundle.js

·打包后观察lib/bundle.js - 被转成成普通函数使用了 - 这就是babel降级翻译的功能

 4、代码变更,自动刷新打包(webpack开发服务器)

       启动本地服务, 可实时更新修改代码, 打包变化的代码到内存中, 然后直接提供端口和网页访问。

        ①下载包      yarn add webpack-dev-server -D

        ②main.js配置自定义命令

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

        ③运行命令 yarn serve 或npm run serve,即可进行打包

以后改了src下的资源代码, 就会直接更新到内存打包, 然后反馈到浏览器上了

           其他配置查看官网DevServer | webpack 中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux locate命令

Linux locate命令用于查找符合条件的文档&#xff0c;他会去保存文档和目录名称的数据库内&#xff0c;查找合乎范本样式条件的文档或目录。一般情况我们只需要输入 locate your_file_name 即可查找指定文件。语法locate [-d ][--help][--version][范本样式...]参数&#xff1a…

Notepad++ 代码格式化插件工具

因为notepad的NppAStyle插件只支持格式化C、C、C#、Java这四种编程语言的代码&#xff0c;所以推荐使用这个CoolFormat的插件&#xff0c;相比于NPPAStyle&#xff0c;CoolFormat支持C\C\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。还可以作为V…

后端java模拟前端RSA.js加密登录爬虫

项目开发过程中&#xff0c;经常会遇到数据爬取需求&#xff0c;但是对于某些网站&#xff0c;由于前端加密&#xff0c;导致数据爬取不容易。比如某网站&#xff0c;前端使用RSA.js加密&#xff0c;并且后端返回对应的公钥的指数和模数&#xff0c;通过后端返回的指数和模数对…

电商如何打开数字化的破局之路

电商网购已经成为我们的日常生活&#xff0c;在如此高节奏的工作下&#xff0c;打开手机或者电脑从网上挑选自己需要的物品&#xff0c;方便快捷&#xff0c;伴随着移动互联网和月的高速发展&#xff0c;电子商务作为现今的产业在我国快速增长和兴起。 如今的电商模式多种多样&…

Elasticsearch7.8.0版本入门——JavaAPI操作(批量操作文档)

目录一、pom文件依赖二、批量操作文档 代码示例2.1、批量创建文档 代码示例2.2、批量删除文档 代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch…

网络分层:OSI模型与TCP/IP模型

前言 这部分个人还是觉得有点难&#xff0c;之前也看过类似的文章&#xff0c;还是没有理解&#xff0c;更多的是概念掌握 OSI模型&#xff1a;Open System Interconnection 这是一个概念模型&#xff0c;存在于理论上&#xff0c;而没有真正实现。需要参考这样的模型&#x…

可以绕过 Windows UAC 吗

目录 一、引言 二、使用 COM 提升名称方法绕过 UAC 2.1 什么样的 COM 组件支持自动提权 2.2 如何以提升名称方法创建 COM 组件对象 2.3 有了权限提升的 COM 组件对象后&#xff0c;怎么为我们所用呢 2.4 使用 rundll32.exe 执行 COM 提升名称代码 2.4.1 rundll32.exe 简…

Qt使用QTextEdit来批量添加数据到数据库中

1.首先要了解QTextEdit的遍历方式 在下面的文章中已经介绍&#xff0c;这里就不在介绍了&#xff1a; 富文本处理&#xff08;QTextEdit&#xff09;_旷工锁的博客-CSDN博客_qtextedit 富文本 基本步骤为&#xff1a; 创建一个QTextEdit使用QTextDocument来获取QTextEdit中的…

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…

【MySQL】MySQL高手是如何练成的?

MySQL什么是MySQL呢&#xff1f;怎样练成MySQL高手&#xff1f;在Linux安装MySQL问题处理Mysql 的用户管理什么是MySQL呢&#xff1f; Mysql 是开源的&#xff0c;可以定制的&#xff0c;采用了 GPL 协议&#xff0c;可以根据业务需要修改源码来开发自己的 Mysql 系统。 MySQL…

彻底弄懂图片懒加载及底层实现原理

我们都知道图片懒加载是前端性能优化比较常见的一个手段&#xff0c;那么&#xff0c;你真的了解图片懒加载吗&#xff0c;本文将带你从简单到复杂一步一步彻底弄懂其底层实现原理。试想一下&#xff0c;假设用户在访问我们的某个页面时&#xff0c;一开始就加载页面的全部图片…

Vue中组件通信-$attrs与$listeners

组件通信-$attrs与$listeners1.$attrs父子组件通信的一种$attrs与$listeners ---- 父子组件通信$attrs&#xff1a;组件实例的属性&#xff0c;可以获取到父亲传递的props数据&#xff08;前提子组件没有通过props接受&#xff09;$listeners&#xff1a;组件实例的属性&#x…

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method 代码&#xff1a;https://github.com/TaoWangzj/LLFormer 这个论文首先构建了ultra-high definition low-light &#xff08;UHD-LOL&#xff09;数据集&#xff0c…

Revit建模操作:地面拼花效果做法和构件上色

一、Revit中如何快速做出地面拼花效果 一般大厅地面都会采用拼花做装饰&#xff0c;下面给大家推荐一种快速做出拼花效果的方法。 1.在Revit中导入地面铺装的CAD图纸&#xff0c;通过拾取底图的线&#xff0c;配合绘制命令分别建立各个形状的楼板&#xff0c;如图1所示&#xf…