webpack简单配置(基于vue3配置)

首先创建webpack.config.js他和src平级

基础配置(具体根据项目而言)

const path = require('path'); // 引入Node.js的path模块,用于处理文件路径
const { VueLoaderPlugin } = require('vue-loader'); // 引入Vue Loader插件,用于处理.vue文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 引入MiniCssExtractPlugin插件,用于提取CSS到单独的文件
const TerserPlugin = require('terser-webpack-plugin'); // 引入TerserPlugin插件,用于压缩JavaScript代码
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); // 引入OptimizeCSSAssetsPlugin插件,用于压缩CSS代码
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入HtmlWebpackPlugin插件,用于生成HTML文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); // 引入CleanWebpackPlugin插件,用于清理构建目录
const webpack = require('webpack'); // 引入webpack模块,用于访问内置插件和工具module.exports = (env, argv) => {// 判断当前环境是否为生产环境const isProduction = argv.mode === 'production';return {// 入口文件entry: './src/main.js',// 输出文件output: {path: path.resolve(__dirname, 'dist'), // 输出路径filename: isProduction ? 'js/[name].[contenthash].js' : 'js/[name].js', // 输出文件名publicPath: '/' // 公共路径},// 模块加载器配置module: {rules: [{test: /\.vue$/, // 匹配.vue结尾的文件loader: 'vue-loader' // 使用vue-loader处理},{test: /\.js$/, // 匹配.js结尾的文件exclude: /node_modules/, // 排除node_modules目录下的文件use: {loader: 'babel-loader', // 使用babel-loader处理options: {presets: ['@babel/preset-env'] // 使用babel的env预设进行转换}}},{test: /\.css$/, // 匹配.css结尾的文件use: [isProduction ? MiniCssExtractPlugin.loader : 'vue-style-loader', // 生产环境提取CSS,开发环境使用style标签插入'css-loader', // 解析CSS文件'postcss-loader' // 使用PostCSS进行后处理]},{test: /\.(scss|sass)$/, // 匹配.scss或者.sass结尾的文件use: [isProduction ? MiniCssExtractPlugin.loader : 'vue-style-loader','css-loader','postcss-loader','sass-loader' // 使用sass-loader将Sass/SCSS转换为CSS]},{test: /\.(png|jpe?g|gif|svg)$/, // 匹配图片文件loader: 'url-loader', // 使用url-loader处理options: {limit: 8192, // 小于8KB的图片转换为base64格式name: 'images/[name].[hash:7].[ext]' // 输出文件名格式}},{test: /\.(woff2?|eot|ttf|otf)$/, // 匹配字体文件loader: 'file-loader', // 使用file-loader处理options: {name: 'fonts/[name].[hash:7].[ext]' // 输出文件名格式}}]},// 解析模块请求的选项resolve: {extensions: ['.js', '.vue', '.json'], // 导入时可以省略的后缀名alias: {'@': path.resolve(__dirname, 'src/') // @符号表示src目录}},// 控制是否生成,以及如何生成 source mapdevtool: isProduction ? false : 'eval-cheap-source-map', // 生产环境不生成Source Map,开发环境生成eval-cheap-source-map类型的Source Map// 开发服务器配置devServer: {contentBase: path.join(__dirname, 'dist'), // 服务器根目录compress: true, // 是否启用gzip压缩port: 9000, // 服务器端口号hot: true, // 启用热模块替换(HMR)open: true // 是否在启动时自动打开浏览器},// 优化配置optimization: {minimizer: [new TerserPlugin(), // 压缩JavaScriptnew OptimizeCSSAssetsPlugin() // 压缩CSS],splitChunks: {cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}},// 插件配置plugins: [new VueLoaderPlugin(), // Vue Loader插件new MiniCssExtractPlugin({ // 提取CSS到单独的文件filename: isProduction ? 'css/[name].[contenthash].css' : 'css/[name].css',chunkFilename: isProduction ? 'css/[id].[contenthash].css' : 'css/[id].css'}),new HtmlWebpackPlugin({ // 生成HTML文件template: './public/index.html',filename: 'index.html',inject: true, // 所有JavaScript资源将被注入到body元素的底部minify: {removeComments: true, // 去除注释collapseWhitespace: true, // 去除空格removeAttributeQuotes: true // 去除属性引号}}),new CleanWebpackPlugin(), // 清理构建目录new webpack.DefinePlugin({ // 定义环境变量'process.env.NODE_ENV': JSON.stringify(argv.mode)})]};
};

需要使用npm安装的指令

Vue 相关依赖

vue@next:Vue 3的最新版本,提供了Composition API、<script setup>等新特性。

npm install vue@next

Webpack 相关依赖

webpack:一个静态模块打包器,用于编译JavaScript模块。

npm install webpack --save-dev

webpack-cli:Webpack的命令行接口,用于运行Webpack命令。

npm install webpack-cli --save-dev

Vue Loader 和编译器

vue-loader@next:用于处理Vue单文件组件(.vue文件)的Webpack加载器。

npm install vue-loader@next --save-dev

@vue/compiler-sfc:用于编译Vue 3的单文件组件的编译器。

npm install @vue/compiler-sfc --save-dev

HTML 插件

html-webpack-plugin:自动创建HTML文件来服务Webpack打包后的脚本。

npm install html-webpack-plugin --save-dev

CSS 处理

css-loader:解析CSS文件,并将其转换为JavaScript模块。

npm install css-loader --save-dev

style-loader:将模块的导出作为样式添加到DOM中。

npm install style-loader --save-dev

开发服务器(可选)

webpack-dev-server:提供了一个简单的web服务器和实现热重载的能力。

npm install webpack-dev-server --save-dev

支持ES6+的Babel转译(可选)

babel-loader:用于转译JavaScript文件。

npm install babel-loader @babel/core @babel/preset-env --save-dev

支持Sass(可选)

sass-loader:加载和编译Sass/SCSS文件。

npm install sass-loader sass --save-dev

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

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

相关文章

RabbitMQ(一):消息队列MQ

目录 1 消息队列MQ1.1 MQ简介1、什么是MQ2、MQ的优势流量削峰应用解耦异常处理数据分发分布式事务 3、消息中间件的弊端4、常用的MQ 1.2 MQ中几个基本概念1.3 MQ的通信模式1.4 消息的发布策略1.5 常用消息中间件协议1、AMQP协议2、MQTT协议3、OpenMessage协议4、kafaka协议 1 消…

uview组件封装form表单后有关弹框的组件安卓部分机型不显示

环境背景介绍: 使用uniapp开发小程序和app , uview版本是 1.8.3 , 分别为ios端安卓端和小程序端 封装了form表单组件,u-select u-action-sheet u-picker 等组件通过 u-input click事件唤起 <u-form-item :key"item.key" :label"$t(item.label)" :…

TiDB 社区智慧合集丨TiDB 相关 SQL 脚本大全

非常感谢各位 TiDBer 在之前 【TiDBer 唠嗑茶话会 48】非正式 TiDB 相关 SQL 脚本征集大赛&#xff01;( https://asktug.com/t/topic/996635 )里提供的各种常用脚本。 在这篇文章中&#xff0c;我们整理了社区同学提供的一系列 TiDB 相关 SQL 脚本&#xff0c;希望能为大家在…

APP被针对攻击了,要怎么解决

随着APP行业的兴起&#xff0c;游戏公司异军突起&#xff0c;不管是在控证还是攻击方面都是属于最复杂的一个场面&#xff0c;游戏APP逐渐成为DDOS流量攻击的“重灾区”。没有提前做好了解就盲目进军游戏APP行业&#xff0c;一旦被攻击就会让公司束手无策。那么&#xff0c;刚上…

OpenAI视频生成模型Sora的全面解析:从ViViT、Diffusion Transformer到NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

数据保护:如何有效应对.BecSec-P-XXXXXXXX勒索病毒的威胁

导言&#xff1a; 随着网络安全威胁的不断增加&#xff0c;勒索软件成为了网络犯罪分子的一种常见手段之一。.BecSec-P-XXXXXXXX勒索病毒&#xff08;简称.BecSec勒索病毒&#xff09;作为其中之一&#xff0c;对用户的数据安全构成了严重威胁。本文91数据恢复将介绍.BecSec勒…

ubuntu20.04 安装 matlab R2023b

ubuntu20.04 使用matlab R2023b 起因步骤问题问题1问题2问题3 起因 闲着没事&#xff0c;想在ubuntu上安装matlab。 步骤 这个博客写得很好&#xff0c;我就不赘述了&#xff1a;参考博客 。但有点不一样&#xff1a;我现在matlab官网上下载的linux版本不是iso镜像文件&…

Redis实现滑动窗口限流

常见限流算法 固定窗口算法 在固定的时间窗口下进行计数&#xff0c;达到阈值就拒绝请求。固定窗口如果在窗口开始就打满阈值&#xff0c;窗口后半部分进入的请求都会拒绝。 滑动窗口算法 在固定窗口的基础上&#xff0c;窗口会随着时间向前推移&#xff0c;可以在时间内平滑控…

fastApi笔记10-请求表单和文件上传

表单 接收的不是json格式&#xff0c;而是表单字段&#xff0c;要使用Form 需要先安装python-multipart&#xff0c;pip install python-multipart 使用Form可以使用于Query&#xff0c;Path&#xff0c;Body等相同的验证和元数据 from fastapi import FastAPI, Formapp F…

基于yolov5的苹果检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的苹果检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的苹果检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目&#xf…

网络通信的隐形桥梁:深入解析地址解析协议(ARP)及其在现代网络安全中的角色

第一部分&#xff1a;ARP简介 地址解析协议&#xff08;ARP&#xff09;是一个在本地网络中用于将网络层地址&#xff08;如IPv4地址&#xff09;解析为链路层地址&#xff08;如以太网MAC地址&#xff09;的协议。ARP的基本功能是允许网络设备发现本地网络上其他设备的物理地…

H12-821_45

45.如图所示,同一局域网中的四台路由器运行IS-IS,其中R1是DIS.则R2、R3、R4分别和R1建立邻接关系,R2、R3、R4之间不建立邻接关系。 A.正确 B.错误 答案&#xff1a;B 注释&#xff1a; 在广播链路上IS-IS路由器建立邻接关系和OSPF不同&#xff0c;所有IS-IS路由器之间都可以建…

【Web前端笔记11】JavaScript基础与变量

前言 11 JavaScript基础与变量 一、Js简介 1、JavaScript核心部分&#xff1a; 2、有非常广泛的使用领域 3、JavaScript与ECMAScript的关系 4、JavaScript版本 二、JavaScript名词解释 三、变量命名规则 四、变量类型 六大基本数据类型&#xff1a; 1、数字类型 2、…

C语言-指针初学速成

1.指针是什么 C语言指针是一种特殊的变量&#xff0c;用于存储内存地址。它可以指向其他变量或者其他数据结构&#xff0c;通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存&#xff0c;以及进行复杂的数据操作。在C语言中&#…

RabbitMQ-消息队列:发布确认高级

18、发布确认高级 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投…

ARM服务器部署Kafka集群

安装前必备的条件是: (1)安装jdk(提供环境); (2)安装zookeeper(注册kafka信息); 需要这方面信息的可以查看我之前写的文档; 一.下载安装包 Kafka官网下载地址 Apache Kafka 根据自己需要下载相应的版本 目前最新的版本是3.6.1。 二.解压安装包 服务器上传下载好的kafk…

《Linux C编程实战》笔记:信号量

信号量在操作系统的书里一般都有介绍&#xff0c;这里就只写书上说的了。 信号量是一个计数器&#xff0c;常用于处理进程或线程的同步问题&#xff0c;特别是对临界资源访问的同步。临界资源可以简单地理解为在某一时刻只能由一个进程或线程进行操作的资源&#xff0c;这里的…

【零基础入门】什么样的人适合学网络安全?该怎么学?

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题&#xff1a; 什么样的人适合学习网络安全&#xff1f;我适不适合学习网络安全&#xff1f; 到底什么样的人适合学习网络安全呢&#xff1f;&#xff08;需要什么前提条件呢&#xff09; 开门见山…

订单到期关闭如何实现(延迟场景处理)

文章目录 概述种处理方案任务调度实现(定时任务)基于redis 如何实现1redis过期key实现&#xff08;键通知机制&#xff09;基于redis延迟队列Redisson实现一个延迟队列 基于MQ的延迟队列实现 概述 订单30分钟未支付自动取消怎么实现 日常开发中&#xff0c;我们经常遇到这种业…

2. Linux进程管理

2. 进程管理 2.1 Linux进程 进程是程序执行时的一个动态实体&#xff0c;包含程序计数器、全部CPU 寄存器的值和进程堆栈中存储着的一些临时数据&#xff0c;如子程序参数、返回地址及变量等&#xff0c;反映的是当前处理器的活动状态。 而程序是仅包含指令和数据的一段静态代…