从0-1建一个webpack/vue项目,熟悉一下webpack知识点

以下配置项部分优化来自于国内直连GPT/Claude

第一步

首先整个新文件夹,打开终端,然后创建一个新目录,或者直接在vscode里面建个新文件夹,并进入该目录;

mkdir my-vue-webpack-project

第二步 进入当前目录

cd my-vue-webpack-project

第三步 初始化npm项目

npm init -y

第五步 安装webpack

npm i -D webpack webpack-cli webpack-dev-server

安装完成之后我们需要配置webpack,在外层建一个build的文件夹,然后在build文件夹中建一个webpack.config.js

const path = require('path');
module.exports = {mode: 'development', // 开发模式entry: path.resolve(__dirname, '../src/main.js'), // 入口文件output: {filename: '[name].[hash:8].js', // [name] 指entry属性名字, 默认为mainpath: path.resolve(__dirname, '../dist'), // 打包后的目录,这里会自动创建dist文件夹clean: true, // 打包前清空输出目录,相当于clean-webpack-plugin插件的作用,webpack5新增。}
}

当前目录如下
在这里插入图片描述

第六步 安装html-webpack-plugin插件

对项目打包压缩之后,会有一个压缩的js文件,我们需要把这个js文件引入到我们的根入口文件index.html中,
html-webpack-plugin这个插件可以自动化完成这个操作

npm i -D html-webpack-plugin

基于以上6步,来个基本的打包示例
1.我们在外层再新建一个pubilc文件夹,在public文件夹里面建一个index.html,之后在webpack.config.js里面引入第六步安装的插件,并写在plugins数组里面,写完之后的webpack.config.js代码如下:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {mode: 'development', //开发环境entry: path.resolve(__dirname,'../src/main.js'),//入口文件output: {//输出文件path: path.resolve(__dirname,'../dist'),filename: '[name].[hash:8].js',//输出文件名clean: true, //每次打包前清空dist文件夹},plugins: [new HtmlWebpackPlugin({template: path.resolve(__dirname,'../public/index.html'),//模板文件})],
}

2.需要在package.json里面加上build打包指令,注意在script对象里面加以下指令

"build": "webpack --config build/webpack.config.js"

3.完成上述内容,就可以在命令行执行npm run build来打包啦
打包成功后如下
在这里插入图片描述
完成以上示例进入拓展内容

第七步 安装css相关loader插件解析我们项目中的css

涉及到css我们需要安装一些常用的css处理插件,比如css,less等相关loader

npm i -D style-loader css-loader less less-loader

之后在webpack.config.js中配置rules

// webpack.config.jsmodule.exports = {//...省略其他配置module: {rules: [{// 用正则去匹配要用该 loader 转换的 CSS 文件test: /\.css$/,exclude: path.resolve(__dirname, 'node_modules'),use: ['style-loader', 'css-loader'] // 切记从右向左解析原则},{test: /.less$/,exclude: path.resolve(__dirname, 'node_modules'),use: ['style-loader', 'css-loader', 'less-loader'] // 从右向左解析原则   }]}
}

第八步 安装autoprefixer ,为css添加浏览器前缀

因为有些CSS属性只支持某个浏览器,或者因为某个属性前端还没形成统一的标准,所以需要在某些css属性上加上各个浏览器的前缀,比如-webkit/-moz等等

.box {-moz-border-radius: 10px;-webkit-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;
}

先安装依赖:

npm i -D postcss-loader autoprefixer 

之后在webpack.config.js里面配置postcss-loader以及autoprefixer 插件即可

 module: {rules: [{test: /.less$/,exclude: path.resolve(__dirname, 'node_modules'),use: ['style-loader', 'css-loader',{loader: 'postcss-loader',options: {postcssOptions: {plugins: [require('autoprefixer')]}}},'less-loader'] // 从右向左解析原则   }]}

第九步 把css样式从js单独抽离出一个文件

安装插件

npm i -D mini-css-extract-plugin

添加插件相关配置【以下包括前面几个步骤的配置,这一步主要看MiniCssExtractPlugin

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {mode: 'development', //开发环境entry: path.resolve(__dirname,'../src/main.js'),//入口文件output: {//输出文件path: path.resolve(__dirname,'../dist'),filename: '[name].[hash:8].js',//输出文件名clean: true, //每次打包前清空dist文件夹},plugins: [new HtmlWebpackPlugin({template: path.resolve(__dirname,'../public/index.html'),//模板文件}),new MiniCssExtractPlugin({filename: "[name].[hash:8].css",chunkFilename: "[id].css",})],module: {rules: [{// 用正则去匹配要用该 loader 转换的 CSS 文件test: /\.css$/,exclude: path.resolve(__dirname, 'node_modules'),use: [MiniCssExtractPlugin.loader,'css-loader'] // 切记从右向左解析原则},{test: /.less$/,exclude: path.resolve(__dirname, 'node_modules'),use: [MiniCssExtractPlugin.loader,'css-loader',{loader: 'postcss-loader',options: {postcssOptions: {plugins: [require('autoprefixer')]}}},,'less-loader'] // 从右向左解析原则   }]}
}

测试打包效果,在src下面新建一个index1.css文件和index2.less文件,并在main.js引入。

之后运行下```npm run build``,可以看到dist下的js和css。发现main.css整合了src下面两个css
在这里插入图片描述

第十步 babel转义js文件【比较重要】

首先安装一系列Babel库,babel-loader负责将ES6/7/8等语法转换为ES5语法 core-js负责将新的api进行转化,例如promise、Generator、Set、Maps、Proxy等

npm i -D babel-loader @babel/preset-env @babel/core @babel/plugin-proposal-decorators
npm i -D @babel/plugin-transform-arrow-functions @babel/plugin-transform-runtime
npm install @babel/plugin-proposal-class-properties --save-dev

上面基本是常用的一些webpack配置项;

我们还可以做一些其他配置,比如热更新

安装插件

npm i -D webpack-dev-server

然后把下面这个命令行放在package.json里面的script对象里面

"dev": "webpack serve --config build/webpack.config.js"
{"scripts": {"dev": "webpack serve --config build/webpack.config.js","test": "echo \"Error: no test specified\" && exit 1","build": "webpack --config build/webpack.config.js"},
}

然后就可以npm run dev运行啦

正常项目我们还要区分下dev环境和生产环境

新建两个文件夹

webpack.dev.js 开发环境使用
webpack.prod.js 生产环境使用
webpack.config.js 公用配置

安装webpack-merge插件库,来合并配置项

npm i -D webpack-merge
// webpack.dev.js
const { merge } = require('webpack-merge');
const common = require('./webpack.config.js')module.exports = merge(common, {mode: 'development',devServer:{port:3000}
});
// webpack.prod.js
const { merge } = require('webpack-merge');
const common = require('./webpack.config.js');module.exports = merge(common, {mode: 'production',
});

原先的webpack.config.js也需要做出修改,我们只需要删除mode和devserver字段
packpage.json修改

  "scripts": {"build": "webpack --config build/webpack.prod.js","dev": "webpack serve --config build/webpack.dev.js"},

还有其他配置,有时间会继续更新,大家有问题可以评论,也可以 直接把你的代码交给GPT/Claude镜像站让AI帮你检查哪里错了

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

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

相关文章

JavaSE基础(11)——java.util包

目录 1、Random 创建Random对象 方法 2、Date类 创建Date对象 3、Canlender类 创建Calendar类对象 方法 4、java.text.SimpleDateFormat类 创建SimpleDateFormat对象 方法 SimpleDateFormat格式规范 5、java.time包 java.time包含的主要类 方法分类 1、Rando…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

赛氪网技术支持第八届集创赛全国总决赛:共绘集成电路创新蓝图

赛氪网技术支持第八届集创赛全国总决赛:共绘集成电路创新蓝图 山东,2024年8月19日至21日 —— 全国瞩目的第八届全国大学生集成电路创新创业大赛(以下简称“集创赛”)全国总决赛在美丽的海滨城市山东省烟台市隆重举行。本次大赛由…

STM32的GPIO

GPIO基本控制 GPIO(General-Purpose input/output,通用输入/输出接口) 用于感知外部信号(输入模式)和控制外部设备(输出模式) 简单模块:LED,按键,蜂鸣器,温度传感器,使用一个GPIO…

tyut-数据库期末复习要点

第一章 数据库系统(DBS)是由数据库(DB),数据库(DBMS) ,应用程序和数据库管理员 (DBA)组成的存储,管理,处理和维护数据的系统 数据模型:比较真实的模拟现实世…

构建基于LLM的应用程序——为您的应用程序选择合适的LLM

。 在本章中,将引导您完成为应用程序选择合适LLM的过程。我们将涵盖以下几个主题: 市场上最具前景的LLM概览比较LLM时应使用的主要标准和工具规模与性能之间的权衡 在本章结束时,您应该能够清楚地理解如何为您的应用程序选择合适的LLM&…

商品价格与优惠信息在API返回值中的位置

在API返回值中,商品价格与优惠信息的具体位置可能因不同的电商平台和API设计而有所不同。然而,一般来说,这些信息会以结构化的方式呈现,通常包含在一个包含多个字段的JSON对象或XML文档中。以下是根据多个电商平台(如阿…

Docker的介绍、保姆级安装和使用

一、Docker简介 1.1、Docker是什么 Docker是一个用于开发、发布和运行应用程序的开放平台;使您能够将应用程序与基础设施分离,以便您可以快速交付软件。不像虚拟机那样笨重(比如:我需要将一个安装好nginx环境的内容分享给其他人: 方式一【使用虚拟】(应用程序Nginx与基…

基于Hadoop的微博社交媒体用户大数据分析【海量数据】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍数据集展示Hadoop脚本文件可视化展示每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 本项目基于hadoop的社交媒体用户进行大数据…

C++:模板 II(非类型模板参数,特化,分离编译)

目录 非类型模板参数 模板的特化 函数模板特化 类模板特化 全特化 偏特化 引用特化 指针特化 模板分离编译 非类型模板参数 什么是非类型模板参数? 顾名思义,它的类型形参并不是一个类型,就是用一个常量来作为类模板或函数模板的…

一款能满足低压供电应用需求SLM8837EF-7G 高效节能的电机驱动芯片

SLM8837EF-7G是一款专为低压供电的电机驱动应用而设计的先进芯片,其内部集成了多种保护电路,以确保系统稳定性和安全性。该芯片拥有双通道 NMOS 半桥输出,分别由两路独立的 PWM 输入控制,提供灵活而精准的控制方式。两个单独的供电…

docker启动ES(elasticsearch:7.17.23)

docker直接启动es,报如下错误 2024-08-22 10:52:27 ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. 2024-08-22 10:52:27 bootstrap check failure [1] of [1]: the defa…

API接口安全101:基础概念与最佳实践

文章目录 API定义协议架构风格描述语言 Webservicewsdl介绍复现 SOAPswagger介绍指纹查找利用存在目录复现 HTTPWebpack介绍复现 在当今数字化时代,API接口已成为现代软件架构中不可或缺的组成部分。它们连接着各种应用程序和服务,促进了数据交换和功能集成。然而,随着API的普及…

人工智能NLP--特征提取之词嵌入(Word Embedding)

一、前言 在上篇文章中,笔者详细讲解介绍了人工智能自然语言处理特征提取中的TD-IDF型文本处理方法,那么接下来,笔者将为大家揭晓,目前阶段,在特征提取,也就是文本数据转成数字数据领域内最常用也是最好用…

在MAVEN中版本依赖有冲突改怎么处理

1.为什么会出现版本依赖的冲突 如果存在版本冲突,通常可能会引发的报错是ClassNotFoundException、NoSuchMethodError等错误。Maven依赖版本冲突通常是由于间接依赖导致同一个jar包存在多个不同版本。例如,如果B依赖了A的1.0版本,而C依赖了A…

网络安全之xss靶场练习

目录 一、xss靶场练习 1、Ma Spaghet! 2、Jefff 第一个方法 第二个方法 3、Ugandan Knuckles 4、Ricardo Milos 5、Ah Thats Hawt 6、Ligma 7、Mafia​编辑 8、Ok, Boomer 一、xss靶场练习 靶场地址 https://xss.pwnfunction.com/ 页面显示如下 1、Ma Spaghet! 分析…

Python之字符串练习题(下)

21.nameStr“Albert Einstein",如何使用字符串运算符“:”来提取 nameStr 中的名和姓? mingnameStr[:6] xingnameStr[7:]23.下面哪些语句在运行时不会出错? (a)var xyz ’ * 10.5 (b)var ‘xyz’ * ‘5 ©var‘’xyz’*5 (d)var‘xyz’*5.0 重复运算符…

Flutter Web 正式官宣弃用 HTML renderer , Canvas 路线成为唯一

Flutter Web 团队计划在 2025 年的第一个 Flutter stable 版本中弃用 HTML renderer,当然在 master 和 beta 中会更早合并这一更改。 关于这个话题,其实在年初的我就曾发布过 《Flutter 即将放弃 Html renderer 》, Html renderer 从 2018 年…

Redis远程字典服务器(7)—— set类型详解

目录 一,基本情况 二,常用命令 2.1 sadd 2.2 smembers,sismember 2.3 spop,srandmember 2.3 smove,srem 2.4 sinter,sinterstore求交集 2.5 sunion,sunionstore求并集 2.6 sdiff&#…

MySQ分库分表与MyCat安装配置

目录 介绍 拆分策略 垂直拆分 1. 垂直分库 2. 垂直分表 水平拆分 1. 水平分库‘ 2. 水平分表 实现技术 MyCat概述 安装 概念介绍 MyCat入门 需求 环境准备 分片配置 启动服务 连接测试 执行SQL语句测试 MyCat配置 1. schema.xml 1. schema标签 2. dat…