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

webpack其余配置

webpack搭建本地服务器

首先是要安装一个webpack-dev-server

 npm install webpack-dev-server -D

 安装后在package.json中添加:

{"name": "babel_core_demo","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","ts-check": "tsc --noEmit","ts-check-watch": "tsc --noEmit --watch","serve": "webpack serve"},"author": "","license": "ISC","description": "","devDependencies": {"@babel/cli": "^7.27.2","@babel/core": "^7.27.4","@babel/plugin-transform-block-scoping": "^7.27.5","@babel/preset-env": "^7.27.2","@babel/preset-react": "^7.27.1","babel-loader": "^10.0.0","html-webpack-plugin": "^5.6.3","ts-loader": "^9.5.2","webpack": "^5.99.9","webpack-cli": "^6.0.1","webpack-dev-server": "^5.2.2"},"dependencies": {"@babel/preset-typescript": "^7.27.1"}
}

然后在终端中运行npm run serve就可以开启本地服务器了

 webpack-dev-server使用了一个库叫memfs(memory-fs webpack自己写的)

它在编译之后不会写入到任何的输出文件,而是将bundle文件保存在内存中

进行配置:

const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, './build'),filename: 'bundle.js',clean: true},resolve: {extensions: ['.js', '.jsx', '.ts']},module: {rules: [{test: /\.jsx?$/,use: {loader: 'babel-loader',options: {presets: [["@babel/preset-env", { targets: ">5%" }],"@babel/preset-react"]}}},{test: /\.ts$/,use: 'babel-loader'}]},plugins: [new HtmlwebpackPlugin({template: './index.html',filename: 'index.html' })],devServer: {static: {directory: path.resolve(__dirname, './build')},open: true,port: 8080,historyApiFallback: true}
}

 devServer的static

devServer中的static 对于我们的直接访问打包后的资源并没有太大的 作用,它的主要作用是如果我们打包后的资源又依赖于其他的一些资源,那么就需要指定从哪里来查找这个内容

打包之后浏览器无法通过相对路径找到文件夹,所以我们需要设置static

const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, './build'),filename: 'bundle.js',clean: true},resolve: {extensions: ['.js', '.jsx', '.ts']},module: {rules: [{test: /\.jsx?$/,use: {loader: 'babel-loader',options: {presets: [["@babel/preset-env", { targets: ">5%" }],"@babel/preset-react"]}}},{test: /\.ts$/,use: 'babel-loader'}]},plugins: [new HtmlwebpackPlugin({template: './index.html',filename: 'index.html' // 或保持 'end.html' 但记得改访问地址})],devServer: {static: [path.resolve(__dirname, './public'),path.resolve(__dirname, './build')],open: true,port: 8080,historyApiFallback: true}
}

 hotOnly、host配置

hotOnly是当代码编译失败时是否刷新整个页面

默认情况下当代码编译失败修复之后我们会重新刷新整个页面

如果不希望重新刷新整个页面,那可以设置hotOnly为true(现在被删了)

host可以设置主机地址,默认是localhost,如果希望其他地方也可以访问那可以设置0.0.0.0

这俩玩意的区别:

 open是是否打开浏览器,默认值是false,设置为true会打开浏览器

也可以设置为类似于google chorme等值

compress是否为静态文件开启gzip compression(在开发服务器中,所有通过 HTTP 返回的静态资源(如 .js.css 等),会开启 gzip 压缩传输。

gzip 是一种压缩格式,它可以减小传输文件的大小,加快加载速度)

默认值是false,也可以设置为true

proxy代理配置

解决跨域问题可以:

静态资源和服务器部署在一起

服务器中开启cors

node本地服务

Nginx

还可以配置代理:

const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, './build'),filename: 'bundle.js',clean: true},resolve: {extensions: ['.js', '.jsx', '.ts']},module: {rules: [{test: /\.jsx?$/,use: {loader: 'babel-loader',options: {presets: [["@babel/preset-env", { targets: ">5%" }],"@babel/preset-react"]}}},{test: /\.ts$/,use: 'babel-loader'}]},plugins: [new HtmlwebpackPlugin({template: './index.html',filename: 'index.html' // 或保持 'end.html' 但记得改访问地址})],devServer: {static: [path.resolve(__dirname, './public'),path.resolve(__dirname, './build')],open: true,port: 8080,historyApiFallback: true,proxy:{'/api':{target:'http://localhost:9000',pathRewrite:{'^/api':''},}}}
}

 这个跨域问题解决了是因为配置了代理之后静态资源和API指向同一个服务器了

const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, './build'),filename: 'bundle.js',clean: true},resolve: {extensions: ['.js', '.jsx', '.ts']},module: {rules: [{test: /\.jsx?$/,use: {loader: 'babel-loader',options: {presets: [["@babel/preset-env", { targets: ">5%" }],"@babel/preset-react"]}}},{test: /\.ts$/,use: 'babel-loader'}]},plugins: [new HtmlwebpackPlugin({template: './index.html',filename: 'index.html' // 或保持 'end.html' 但记得改访问地址})],devServer: {static: [path.resolve(__dirname, './public'),path.resolve(__dirname, './build')],open: true,port: 8080,historyApiFallback: true,proxy:{'/api':{target:'http://localhost:9000',pathRewrite:{'^/api':''},},changeOrigin:true,}}
}

这个changeOrigin就是帮助我们骗过服务器的校验的,帮我们改了东西

 

 historyApiFallback

这是一个比较常见的属性,作用是解决SPA页面在路由跳转之后进行页面刷新时返回404的错误

像Vite什么的都是直接把这个配置为true的

 webpack性能优化

 

http://www.xdnf.cn/news/12815.html

相关文章:

  • uni-app学习笔记二十七--设置底部菜单TabBar的样式
  • AUTOSAR实战教程--标准协议栈实现DoIP转DoCAN的方法
  • 12-OPENCV ROCKX项目 人脸拍照
  • 【Blender】Blender 基础:导入导出
  • 【算法】【优选算法】优先级队列
  • Hermite 插值
  • Day47
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
  • 【CSS-6】深入理解CSS复合选择器:提升样式表的精确性与效率
  • 宝塔安装配置FRP
  • 【题解-洛谷】P10448 组合型枚举
  • 基于RAG实现下一代的企业智能客服系统
  • 2025年6月|注意力机制|面向精度与推理速度提升的YOLOv8模型结构优化研究:融合ACmix的自研改进方案
  • 当SAP系统内计划订单转换为生产订单时发生了什么?
  • 混合策略实现 doc-doc 对称检索局限性与失败案例
  • 基于算法竞赛的c++编程(21)cin,scanf性能差距和优化
  • 在 Windows 11 或 10 上删除、创建和格式化分区
  • tableau 实战工作场景常用函数与LOD表达式的应用详解
  • 操作系统进程管理解析:从 fork 到 exec 的全流程实战与底层原理
  • Python Robot Framework【自动化测试框架】简介
  • OTF字体包瘦身,保留想要的字
  • vector使用及模拟
  • python并发编程
  • 【AI系列】BM25 与向量检索
  • 并行硬件环境及并行编程
  • 【Java学习】Spring Security登录认证流程通俗版总结归纳
  • 【西门子杯工业嵌入式-4-什么是外部中断】
  • Cursor生成Java的架构设计图
  • 第二十六章 流程控制: case分支
  • 一键亮灯高级和弦触发自动鼓机:特伦斯自动挡钢琴开启音乐创作的全新时代