前端工程化之:webpack2-1(常用扩展)

2024-02-04 15:20

本文主要是介绍前端工程化之:webpack2-1(常用扩展),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、CleanWebpackPlugin

二、HtmlWebpackPlugin

三、CopyPlugin

四、webpack-dev-server

五 、file-loader

六、url-loader

七、路径问题

前言

由于 webpack webpack-cli webpack-dev-server 会存在版本不兼容问题,所以这里使用的版本如下: 

"devDependencies": {"clean-webpack-plugin": "^3.0.0","file-loader": "^5.0.2","html-webpack-plugin": "^3.2.0","url-loader": "^3.0.0","webpack": "^4.41.5","webpack-cli": "^3.3.10","webpack-dev-server": "^3.10.1"}

一、CleanWebpackPlugin

 每次打包后不会再次生成新的文件,而是对原来打包的文件进行更新。

 webpack.config.js :

var { CleanWebpackPlugin } = require("clean-webpack-plugin")
module.exports = {mode: "development",devtool: "source-map",output: {filename: "[name].[chunkhash:3].js"},plugins: [new CleanWebpackPlugin()]
}

二、HtmlWebpackPlugin

 可以自动生成 html 文件引用打包后的文件。

 webpack.config.js :

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {mode: "development",devtool: "source-map",entry: {home: "./src/index.js",//home由index打包来a: "./src/a.js"},output: {filename: "scripts/[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({//可以每个文件引用不同的包template: "./public/index.html",//自动生成的html文件模板采用filename: "home.html",chunks: ["home"]//引用的js包}),new HtmlWebpackPlugin({template: "./public/index.html",filename: "a.html",chunks: ["a"]})]
}

三、CopyPlugin

复制静态文件。 

 webpack.config.js : 

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:3].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html"}),new CopyPlugin([{ from: "./public", to: "./" }//将public中的文件复制到出口文件夹例(默认dist)])]
}

四、webpack-dev-server

开发服务器:搭建一个本地开发环境,直接运行到浏览器,不会每次运行都打包。

默认运行本地地址:http://localhost:8080/

// 安装插件
npm i -D webpack-dev-server// 运行命令
npx webpack-dev-server

配置:

  1.  port:运行的端口号;
  2.  open:开启服务器后自动打开浏览器窗口发访问地址;
  3.  index:默认值 "index.html"
  4.  proxy:配置代理;
  5.  stats:配置控制台输出内容。

五 、file-loader

 file-loader 可以将打包过程中识别不了的文件进行处理,生成依赖的文件到输出目录,然后将模块文件设置为:导出一个路径。

 src/index.js :

const png = require("./assets/backg.png").default;
let num = Math.random();
console.log(num, "--");
if (num > 0.5) {var img = document.createElement("img");img.src = png;document.body.appendChild(img);
}

 webpack.config.js : 

module: {rules: [{test: /\.(png)|(jpg)|(gif)$/,// use: ["file-loader"], // 第一种写法use: [{loader: "file-loader", // loader插件名options: {name: "imgs/[name].[hash:5].[ext]", // 生成文件名},},], // 第二种写法},],},

  file-loader 原理: 

function loader(source){// source:文件内容(图片内容 buffer)// 1. 生成一个具有相同文件内容的文件到输出目录// 2. 返回一段代码   export default "文件名"
}

六、url-loader

将依赖的文件转换为:导出一个 base64 格式的字符串。

  src/index.js :

import png from "./assets/backg.png"; // url-loader
let num = Math.random();
console.log(num, "--");
if (num > 0.5) {var img = document.createElement("img");img.src = png;document.body.appendChild(img);
}

  webpack.config.js : 

module: {rules: [{test: /\.(png)|(jpg)|(gif)$/,use: [{loader: "url-loader",options: {// limit: false, // 默认为false,为false时不限制任何大小,所有经过loader的文件进行base64编码返回limit: 10 * 1024, // 只要文件不超过10*1024字节,则使用base64编码,否则,交给file-loader处理name: "imgs/[name].[hash:5].[ext]", // file-loader处理},},],},],

 url-loader 原理: 

function loader(source){// source:文件内容(图片内容 buffer)// 1. 根据buffer生成一个base64编码// 2. 返回一段代码   export default "base64编码"
}

七、路径问题

在使用 file-loader url-loader 时,可能会遇到一个非常有趣的问题:

比如,通过 webpack 打包的目录结构如下:

dist|—— img|—— a.png  #file-loader生成的文件|—— scripts|—— main.js  #export default "img/a.png"|—— html|—— index.html #<script src="../scripts/main.js" ></script>

这种问题发生的根本原因:模块中的路径来自于某个 loader plugin ,当产生路径时, loader plugin 只有相对于 dist 目录的路径,并不知道该路径将在哪个资源中使用,从而无法确定最终正确的路径。

面对这种情况,需要依靠 webpack 的配置 publicPath 解决。

module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:5].js",publicPath: "/"//一般情况设置总的路径即可}
}

有些插件会自己内置 publicPath 属性进行配置。 

这篇关于前端工程化之:webpack2-1(常用扩展)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677951

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作