《基于 Vue 组件库 的 Webpack5 配置》- 总结

前言

Vue2 项目升级到 Webpack5 后,相关的配置也有所变化!此篇以记录和总结,共同学习 Webpack ~
推荐相关文章:

  • 《Vue2.x 组件库 Webpack3 升 5》
  • 《Vue2.x 项目 Webpack 4 升级 5(半自动升级)》

配置

1. 模式 Mode

一定要配置 模式 Mode,这里有个小知识点,环境变量 process.env.NODE_ENV

module.exports = {mode: 'production',// process.env.NODE_ENV 或 development,
}

2. vue-loader

一定要配置 vue-loader

  • Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用;

  • 一个 webpack 的 loader,它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件;

  • vue-loadervue-template-compiler 要一起安装,以保证版本的一致性。npm install -D vue-loader vue-template-compiler

  • package.json 的 webpack 中必须配置该插件,如下

    const { VueLoaderPlugin } = require('vue-loader')module.exports = {module: {rules: [// ... 其它规则{test: /\.vue$/,loader: 'vue-loader'// use: ['vue-loader'] //也可以,是数组}]},plugins: [// 请确保引入这个插件!new VueLoaderPlugin()]
    }
    

3. module.rules

配置 module.rules ,创建模块时,匹配请求的规则数组;

  • 可参考 webpack5 指南-管理资源;

  • vue 可参考上述配置;

  • js 使用 webpack babel-loader;

  • css 参考 webpack 加载 CSS。注意style-loadervue-style-loader 选一个即可,两者的功能基本一致,只是 vue-style-loader 可用于服务端渲染 SSR;

  • stylus 参考 webpack stylus-loader。可使用 插件 MiniCssExtractPlugin 提取样式到单独的文件,需额外安装 npm i mini-css-extract-plugin -D

  • png/svg/jpg 参考 webpack 加载图像,注意 type 的配置 资源模块 asset/resource (强烈建议认真阅读此链接)

  • ttf/woff/woff2 参考 webpack 加载字体,注意 type 的配置 资源模块 asset/resource (强烈建议认真阅读此链接)

  • webpack.config.js 的配置如下

    // 需安装,可将CSS提取到单独的文件:
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')module.exports = {module: {rules: [{test: /\.vue$/,loader: 'vue-loader'},{test: /\.js$/,// 必须加上,否则在编译过程中报错 The code generator has deoptimised the stylingexclude: /node_modules/, loader: 'babel-loader'},{test: /\.css$/,use: ['style-loader',//与 style-loader 功能类似,只是 vue-style-loader 可用于服务端渲染// "vue-style-loader", "css-loader"]},{test: /\.styl(us)?$/,use: [MiniCssExtractPlugin.loader,'css-loader','stylus-loader',]},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: 'asset/resource',generator: {// publicPath: 'assets/imgs/', // https://webpack.docschina.org/configuration/module#rulegeneratorfilenamefilename: 'imgs/[hash][ext]',}},{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: 'asset/resource',generator: {// publicPath: 'assets/fonts/',filename: 'fonts/[hash][ext]',}},]},
    }
    

4. 将 CSS 提取到单独的文件

  • 使用 webpack 插件 mini-css-extract-plugin 需要额外安装 npm i mini-css-extract-plugin@latest -D

  • 同时打包 js 和 css 文件时,可参考 entry 高级用法;

  • package.json 的配置如下

    const { VueLoaderPlugin } = require('vue-loader');
    // 可将CSS提取到单独的文件
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')module.exports = {mode: 'production',entry: {"my-webcomponents": ['./index.js', './src/assets/stylus/main.styl'],"my-webcomponents2": ['./index2.js', './src/assets/stylus/main2.styl'],},output: {path: path.resolve(__dirname, 'dist'),filename: '[name].js',clean: true, },plugins: [new VueLoaderPlugin(),        new MiniCssExtractPlugin({filename: "[name].css",// filename: "main.css", // 也可以指定名称,但css只会输出一个}),],
    }
    

5. 压缩 CSS 和 js 文件

  • 压缩 CSS 使用 webpack 插件 css-minimizer-webpack-plugin,需要额外安装 npm i css-minimizer-webpack-plugin@latest -D
  • 压缩 js 使用 webpack 自带插件 terser-webpack-plugin,无需额外安装;
  • package.json 的配置如下
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");module.exports = {optimization: {// 优化minimize: true,minimizer: [new CssMinimizerPlugin(),//压缩cssnew TerserPlugin({// 压缩 jsterserOptions: {format: {comments: false,},},extractComments: false,}),],}
}

6. js代码混淆

  • 使用 插件 webpack-obfuscator,需要安装 npm install --save-dev javascript-obfuscator webpack-obfuscator

  • package.json 的配置如下

const WebpackObfuscator = require('webpack-obfuscator');module.exports = {plugins: [new WebpackObfuscator ({rotateStringArray: true}, [])],
}

7. 静态文件

将字体库和图片等静态资料,编译后打包至指定文件夹

  • 参考 Rule.generator.filename
  • package.json 的配置如下
module.exports = {module: {{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: 'asset/resource',generator: {// publicPath: 'assets/imgs/', // filename: 'imgs/[hash][ext]',}},{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: 'asset/resource',generator: {filename: 'fonts/[hash][ext]',}},]},
}

8. 路径别名

resolve.alias

const path = require('path');module.exports = {resolve: {alias: {"@": path.resolve(__dirname, "./src/"),"@assets": path.resolve(__dirname, "./src/assets/"),"@mixins": path.resolve(__dirname, "./src/mixins/"),"@components": path.resolve(__dirname, "./src/components/"),"@images": path.resolve(__dirname, "./src/assets/images/")},extensions: [".*", ".js", ".vue", ".json"]}
}

9. 性能

performance

module.exports = {performance: {// 性能hints: 'warning', // 枚举 false 关闭性能提示maxEntrypointSize: 10240000000000, // 最大入口文件大小maxAssetSize: 10240000000000, // 最大资源文件大小},
}    

10. 在生成打包文件之前清空 output(dist) 目录(两种方式)

方式一:

如果 webpackv5.20.0+,直接使用属性 output.clean,配置如下:

module.exports = {//...output: {clean: true},
};

方式二:

如果使用较低版本,可以使用插件 clean-webpack-plugin

先安装:npm i clean-webpack-plugin -D

再配置:

const {CleanWebpackPlugin} = require('clean-webpack-plugin');module.exports = {//...plugins: {new CleanWebpackPlugin() },
};

11. module.exports 可为数组类型且注意编译顺序

  • module.exports常见是对象类型,其实也可用数组类型;
  • 注意编译顺序,从后往前 编:
    • 也就是说先编 another.js,再编 index.js
    • 所以代码第 9 行不能设置为 true,仅在第一次,也就是代码第19行设置一次即可清空整个 output 文件夹;
    • 如果代码第 9 行设置为 true,则在编 index.js时,会删除another.js 已编译好的文件;
module.exports = [{mode: 'production',entry: {"indexs": './index.js' ,},output: {filename: '[name].js',// clean: true, // 在每次构建前清理 /dist 文件夹}},{mode: 'production',entry: {"another": './another.js' ,},output: {filename: '[name].js',clean: true, // 在每次构建前清理 /dist 文件夹}}
];

最后

想了解更多,可参考 Webpack 官网 !

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

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

相关文章

LabVIEW开发LED驱动电源测试系统

LabVIEW开发LED驱动电源测试系统 本项建立一个二维激光振镜扫描控制系统,涵盖了光学系统和激光器的选择以及振镜驱动器的设计。项目的核心工作包括振镜驱动器的硬件电路设计、上位机控制软件的编写以及驱动器底层驱动软件的开发。此外,还对扫描图形的几何…

拍照就能建模!手机就能访问! 这个技术正成为宣传新手段!

随着人工智能技术的不断进步,现在可以通过拍摄照片结合AI技术来实现3D模型生成。这种技术的出现, 不仅能更加方便快捷地创建3D模型,而且还能真实复原现实中物件的质感、纹理等。同时,极大地降低了各行业对3D技术的应用门槛&#x…

中科院1区TOP,Elsevier出版社,均1-2个月录用!检索超稳!

【SciencePub学术】本期,小编给大家推荐的是一本Elsevier旗下、工程技术领域、影响因子为6.0的中科院1区TOP。其详情如下: 期刊简介 TRIBOLOGY INTERNATIONAL ISSN:0301-679X E-ISSN:1879-2464 IF(2022&#x…

ES6+ 面试常问题

一、let const var 的区别 1. var: 没有块级作用域的概念,有函数作用域和全局作用域的概念全局作用域性下创建变量会被挂在到 windows 上存在变量提升同一作用域下,可以重复赋值创建未初始化,值为 undefined 2. let&#xff1a…

最新AI系统ChatGPT网站H5系统源码,支持AI绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

经典文献阅读之--OccNeRF(基于神经辐射场的自监督多相机占用预测)

0. 简介 作为基于视觉感知的基本任务,3D占据预测重建了周围环境的3D结构。它为自动驾驶规划和导航提供了详细信息。然而,大多数现有方法严重依赖于激光雷达点云来生成占据地面真实性,而这在基于视觉的系统中是不可用的。之前我们介绍了《经典…

【 ATU NXP-SBC 系列 】FS26XX GUI_OTP烧录与模拟操作

1. 概述 FS26XX 为了其安全性需求,针对重要暂存器的配置,使用 one time program 的功能,避免不小心修改重要暂存器,导致发生重大意外,使系统丧失功能安全性。FS26XX 也可以让使用者先测试 OTP 后的结果功能&#xff0…

微信小程序开发系列-03全局配置中的“window”和“tabBar”

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

C# 如何使用?、? 和 ??的区别和使用案例

目录 ? 运算符 使用案例 ?? 运算符 使用案例 总结 在 C# 中,? 和 ?? 运算符在处理 null 值时起着不同的作用,并且具有特定的使用场景。 ? 运算符 ? 运算符,也称为空条件运算符,在 C# 6.0 及更高版本中引入。它允许…

08-React路由(Router 6版本)

Router5和Router6的变化 部分标签产生了变化,之前的标签都有了替(主要集中在Route匹配上),所以这里先回顾一下Router5,同时引出Router6的一些新特性 其次,React官方在推出Router6之后,就明确推…

OpenCV-Python(9):图像基础操作

目录 学习目标 获取图像像素并修改像素值 获取图像属性 图像ROI 拆分及合并图像通道 图像边缘扩充 学习目标 获取像素值并修改获取图像的属性(信息)图像的ROI获取图像通道拆分及合并图像扩边 获取图像像素并修改像素值 几乎所有这些操作与Numpy 的关系要比与OpenCV 的…

关于软件运维的题目

prometheus监控,监控mysql数据库,自动发现概述,Grafana。 prometheus监控,数据库监控。mysqlid_exporter zabbix系统监控,安装zabbix监控平台配置Zabbix_agentd zabbix系统监控,添加被控端主机,常用监控…

【电商项目实战】MD5登录加密及JSR303自定义注解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…

飞书文档如何转markdown

飞书文档如何转markdown 实现效果实现步骤其他方法 实现效果 导出的结果挂在这了 https://thinkasany.github.io/docs/#/ 实现步骤 以https://upyun.feishu.cn/docx/KERsd1DpioPb1xxye9VcuXbhnBC这篇文章为例 使用工具 https://github.com/Wsine/feishu2md,提供了…

案例-旋转的太极图案(HTML+CSS)

使用css的动画变换效果完成“ 旋转太极“。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;background-color: antiquewhite;}.tj{width: 0;height: 300px;/* border…

AWTK 开源串口屏开发(4) - 采用数据

AWTK 开源串口屏开发 - 数据采集 1. 功能 数据采集是一个常用的功能&#xff0c;MCU 定时采集数据&#xff08;如环保设备定时采样空气中的污染物&#xff09;&#xff0c;并发送采样数据到串口屏&#xff0c;串口屏可以显示采样数据&#xff0c;也可以对采样数据进行管理&am…

68.乐理基础-打拍子-大附点与变体

上一节内容&#xff1a;66.乐理基础-打拍子-小切分-CSDN博客&#xff0c;只所以没有67因为67可以不用知道&#xff0c;67节内容在&#xff1a;※-打拍子&#xff08;8&#xff09;-一拍内的变体1-乐理教程-腾讯课堂 (qq.com) 大附点&#xff1a;大附点这个名字不是通用的&…

基于element-ui table组件的二次封装

文章目录 配置数据基础分析封装 el-table-column使用插槽强化结语 相信 element-ui 大家都有所耳闻&#xff0c;table 也是老朋友了&#xff0c;不过在使用它的时候大家是怎么使用的呢&#xff1f;是直接在官网上cv使用吗&#xff1f;这种方式&#xff0c;我相信写起来会有点小…

【教学类-43-02】20231226 九宫格数独2.0(n=9)(ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 大4班20号说&#xff1a;我不会做这种&#xff08;九宫格&#xff09;&#xff0c;我做的是小格子的&#xff0c; 他把手工纸翻过来&#xff0c;在反面自己画了矩阵格子。向我展示&#xff1a; “我会做这种&#xff01;” 原来他…

QT+OSG/osgEarth编译之六十四:cfg+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_cfg)

目录 1、cfg介绍 2、文件分析 3、pro文件 4、编译实践 1、cfg介绍 cfg是camera configuration file的缩写,特指osg的相机配置文件。 2、文件分析 OpenSceneGraph-3.6.5\src\osgPlugins\cfg\CMakeLists.txt