【vue】devserver及其配置_刘乙江的博客-程序员宅基地

技术标签: 学习  笔记  webpack  前端  vue.js  vue学习笔记  

一、devserver背景

每次改代码都需要重新部署,
或者只改变修改代码行的效果
所以出现了devserver本地服务
为了完成自动编译,webpack提供了几种可选的模式
方式一:webpack watch mode

  1. 实现方法一: 在导出的配置中,添加watch:true
  2. 实现方法二: 在启动webpack的命令中,添加–watch的标识

方式二:webpack-dev-server(常用)

二、webpack-dev-server

上面的方式可以监听到文件的变化,但是事实上它本身没有自动刷新浏览器的功能的,
当然我们可以通过vscode使用live-server来完成这样的功能,但是我们希望不使用live-server的情况下,可以具备实时重新加载的功能
步骤:
1、安装npm install webpack-dev-server -D
2、增加命令"serve":“webpack serve”
3、npm run serve即可

用这个启动项目有个特点:
不会输出build文件夹
因为localhost8080—express(src等静态文件)
打包时直接将src等文件编译后放到内存里,然后直接使用express框架发起服务
如果先编译,放到外存里,然后将其上传到内存,然后使用express框架发起服务。那样会降低效率

在这里插入图片描述

三、对devserver进行一些配置:

在webpack.config.js中,写上

devServer:{
  contantBase:"./abc"
}

如果index.html里<script. src=“./aaa.js”>, 打包时会去找abc/aaa.js,这就是contantBase的作用,可以理解为去源代码里找文件,一般值是"./public"
因为webpack.config.js中配置了webcopyPlugin,如果没有配置,那么就不会
拷贝图片等静态文件,这时候就需要去public文件夹中寻找。

一般开发阶段使用contantBase
一般打包阶段(上传服务器)使用copyplugin

四、模块热替换HMR

应用程序在运行过程中,替换,添加,删除模块都会重新刷新整个页面,拿计数器案例为例:
加到199了,js代码新增了console.log(“aaa”)
导致199变成了0

target:"web"
 devserver:{
  contantBase:"./abc",
  hot:true,//热更新
 open:true,//build自动打开浏览器
 host://默认lolaohost,也可0.0.0.0,这样同一网段的主机都能通过ip访问
 port:7777//访问项目时的端口号
 compress:true浏览器请求静态资源时压缩一下,打开浏览器的检查时可以看到bundle.js的content-encoding是gzip,浏览器自动解压
}
main.js中,import "./js/element":改为
import "./js/element":
if(module.hot){
  module.hot.accept("./js/element.js",()=>{
    console.log("模块发生更新了")
   }
}

.vue文件中修改message也会触发模块热替换的
修改了这个配置需要重新npm run serve

五、跨域访问问题:

localhost7777的项目代码中axios了localhost8000的数据moment,就会出现跨域访问报错,(浏览器不允许跨域)
解决办法

devserver:{
contantBase:“./abc”,
hot:true,
open:true,
host:
port:7777
proxy:{
“/api”:“http://localhost:8888”
}
}
然后在axious时,改成axious(“/api/moment”)
这样仍会报错,因为axious解析时会把/api/moment解析成http://localhost:8888/api/moment,所以会报错404
解决办法:
proxy:{
“/api”:{
target:“http://localhost:8888”,
pathRewrite:{
“^/api”:“”
},
secure:false,//若target是https,并且secure是true,就会停止访问
changeOrigin:true,//当前项目是localhost7777,代理是localhsot8888,在真实请求服务器时,服务器会检查源头在哪,如果不加changeOrigin,那么服务器会看到header里localhost:7777/api/moment,而不是8888
}
在这里插入图片描述

六、webpack的resolve:

import时后边的括号可以写:

  • 相对路径
  • 绝对路径
  • node_module

下边介绍node_module:
webpack.config.js里有一个(如果没有,那就是全取得默认值)
resolve:{
modules : [“node_modules”]//默认从这里找,所以文件夹不能改名字
extension:[“.js”,“.vue”]
alias:{
“js”:path.resolve(__dirname,“./src/js”),
“@”:path.resolve(__dirname,“./src”),
这样配置上后main.js中的import不用写./开头了
}
}
如何判断是文件还是文件夹呢
如果没有后缀,那么匹配js/json/jms去找文件,如果有那就是文件,如果没有那就是文件夹,如果是个文件夹,看看里边有没有index的文件

七、区分开发环境和生产环境

package.json中指令里
build值改为“webpack --config ./config/webpack.prod.config.js”
serve值改为“webpack serve --config ./config/webpack.dev.config.js“

npm install webpack-merge

新建文件夹config
新建文件webpack.prod.config.js

const {cleanWebpackPlugin}=require("clean-webpack-plugin")
const copyWebpackPlugin = require("copy-webpack-plugin")
const {merge} =require("webpack-merge")
const commonConfig= require("./config/webpack.common.config.js")

module.exports=merge(commonConfig,{
   mode:"production",
   plugins: [
new CleanWebpackPlugin(),
new CopyWebpackPlugin({
    patterns: [
      {
         from: ' "public" ,
         to: "./",
        glob0ptions: {
           ignore: [
              "**/ index . html"
           ]}
       }
    ]
  }))
]

新建文件webpack.dev.config.js

module.exports={
    mode:"development",
    devtool:"source-map",
    devserver:{
      contantBase:"./abc",
      hot:true,
      open:true,
       host:
       port:7777
       proxy:{
         "/api":"http://localhost:8888"
      }
   }
}

新建文件webpack.common.js

module.exports={
   公共的一些配置留在这个文件里
} 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42425551/article/details/123327422

智能推荐

ssh远程连接虚拟机_使用ssh客户端登录到虚拟机-程序员宅基地

ssh远程连接工具的使用(在windows系统下)1.打开MobaXterm软件(下载连接在文章最后),点击左上角session。2.进入后,点击左上角的SSH,进入新视图后在Remote host里加上虚拟机的IP地址,以及用户名,默认端口223.点击OK就可以远程连接到虚拟机了。PS:要保证次虚拟机是开启的状态下才可以连接上。可以查询历史命令使用history | less 或者 historyMobaXterm下载连接英文版..._使用ssh客户端登录到虚拟机

Unity3D Rigidbody详解-程序员宅基地

本文转载自http://bbs.9ria.com/thread-222155-1-1.html转载请注明出处正文:刚体能让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物理表现效果。所有游戏对象必须包含刚体组件来实现重力、通过脚本施加力、或者与其他对象进行交互,这一切都通过NVIDIA的PhysX物理引擎来实现。属性Mass 质量,单位为Kg,建议

Visual Studio 2019 x64 环境下onvif环境的搭建,含客户端、服务端及鉴权_onvif服务端鉴权-程序员宅基地

生成onvif.h文件wsdl2h -o onvif.h -c++ -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/netw_onvif服务端鉴权

cellphonedb 及其可视化-程序员宅基地

在单细胞数据分析过程中,上游的拆库定量,中游的分群注释,目前的门槛是很低的了。但是解析细胞类型异质性不应止于这些,还可以看细胞群之间的通讯。当然,这方面我们介绍过CellChat:细胞间相互作用分析利器。CellChat是以信号通路为单位来计算细胞间交流状态的,很多同学用cellphonedb来做基于配受体对的细胞间交流。今天,我们就来用经典的pbmc3k数据跑一下cellphonedb,并尝试可视化。先放一张想象图:文章剩余内容<<<..._cellphonedb

mybatis中使用${}的样例-程序员宅基地

&gt; 在mapper.xml中使用${}时,目前我也就只知道必须要利用一个对象封装一下你要传的参数(或者利用注解参数来实现),例子中我使用的是MySqls对象,封装要直接传递的sql语句。`如果直接在mapper接口中定义String类型的参数,不封装一层对象,报错(String 里面没有当前传递的参数属性)`封装一层对象的方式实现:mybatis注解参数的实现方式:利...

HTTP响应码_httpgetaction 响应码-程序员宅基地

了解HTTP响应码、请求和响应的头标含义,对于我们Web测试中定位问题非常有帮助的。一、HTTP响应码响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。响应码分五种类型,由它们的第一位数字表示:1xx:信息,请求收到,继续处理2xx:成功,行为被成功地接受、理解和采纳3xx:重定向,为了完成请求,必须进一步执行的动作4xx:客户端错误,请求包含语法错误或者请求无法实现

随便推点

tftp服务器的配置和使用---虚拟机与linux开发板_开发板tftp配置-程序员宅基地

一、tftp服务器的安装和配置1.在ubuntu上安装xinetd, sudo apt-get install xinetd2.继续安装tftp和tftpd, sudo apt-get install tftp-hpa tftpd-hpa3.建立 TFTP 的配置文件,使用命令:vi /etc/xinetd.d/tftp 建立文件并输入 service tftp { socket_..._开发板tftp配置

二、django的路由层-程序员宅基地

路由层路由匹配# 路由匹配url(r'test',views.test),url(r'testadd',views.testadd)"""url方法第一个参数是正则表达式 只要第一个参数正则表达式能够匹配到内容 那么就会立刻停止往下匹配 直接执行对应的视图函数浏览器输入url的时候如果没有加/结尾,并且一组url都没有匹配成功,那么django内部帮你做到重定向,在url后面加斜杠/后再来匹配一次url"""# 在settings中取消自动加斜杠再匹配APPEND_SLASH

第6周学习:Vision Transformer; Swin Transformer__盐焗鸡的博客-程序员宅基地

我感觉ConvNeXt就是对ST和VIT的一次翻译,将Transformer翻译成卷积神经网络的形式。同时,采用了各种方法进行调参以提高成功率。但这样的网络一些的部分是为了NLP任务而存在的,对于CV任务却获得了更好的结果emmm,感觉是工程科学了。...

postMessage 跨域-程序员宅基地

iframe 中的子页面window.parent.postMessage({age:18}); 父页面接受window.onmessage = function(e){console.log(e);}

Linux下Mysql自启动-程序员宅基地

如果你都是按照默认配置安装的那么只要按照如下步骤就可以了1、cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql 将服务文件拷贝到init.d下,并重命名为mysql2、chmod +x /etc/init.d/mysql 赋予可执行权限3、chkconfig --add mysql _linux下mysql自启动

win10+ubuntu18.04.3双系统双硬盘EFI安装-程序员宅基地

win10+ubuntu18.04.3双系统双硬盘EFI安装UltraISO制作ubuntu安装镜像在SSD盘上C盘压缩出400MB容量未分配硬盘上留出130GB容量未分配U盘UEFI启动ubuntu手动分配分区ssd上 419MB 主分区 EFI根目录 / 71680MB 主分区 Ext4日志文件系统SWAP 8192MB 逻辑分区 E...