当前位置: 首页 > news >正文

从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帮你检查哪里错了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • consul 运维中遇到的问题
  • 【jvm】局部变量表与GCRoots之间的关系
  • 仓颉编程语言亮相全国大学生计算机系统能力大赛
  • 摄影曝光:曝光模式认知
  • Jenkins服务安装配置
  • QT: 将QGraphicsScene中的所有QGraphicsItem转化成Gcode
  • 【ORACLE】如何使用EXPLAIN PLAN来分析 listagg() 函数的性能瓶颈?
  • 【OpenGL】xcode+glfw画三角形
  • Oracle 同义词SYNONYM 的实战使用
  • 大模型企业应用落地系列五》基于大模型的对话式推荐系统》大模型管理层
  • 10. Java 中的 HashSet 和 HashMap 有什么区别?
  • 第四章 Java核心类库 第一节 字符串处理
  • 如何用Java SpringBoot+Vue打造高效产品订单管理系统?
  • PHP房屋出售出租多端多平台预约系统小程序源码
  • 微信小程序vue3父组件调用vue2子组件传多个参数方法
  • 【node学习】协程
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android 架构优化~MVP 架构改造
  • HTML-表单
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js学习笔记
  • LeetCode29.两数相除 JavaScript
  • Mac转Windows的拯救指南
  • PHP 小技巧
  • python3 使用 asyncio 代替线程
  • QQ浏览器x5内核的兼容性问题
  • 关于Flux,Vuex,Redux的思考
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前嗅ForeSpider教程:创建模板
  • 区块链共识机制优缺点对比都是什么
  • 人脸识别最新开发经验demo
  • 实战|智能家居行业移动应用性能分析
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 问题之ssh中Host key verification failed的解决
  • 转载:[译] 内容加速黑科技趣谈
  • 自动记录MySQL慢查询快照脚本
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • hi-nginx-1.3.4编译安装
  • Nginx实现动静分离
  • 整理一些计算机基础知识!
  • ​2021半年盘点,不想你错过的重磅新书
  • ​linux启动进程的方式
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #Linux(权限管理)
  • #知识分享#笔记#学习方法
  • (04)odoo视图操作
  • (06)Hive——正则表达式
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)(2.10) LTM telemetry
  • (JS基础)String 类型
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (离散数学)逻辑连接词