• webpack 小插件使用
  • webpack 监听文件变化配置
  • webpack 处理跨域问题

Webpack 小插件使用

  • clean-webpack-plugin: 用于在生成之前删除生成文件夹的Webpack插件
  • copy-webpack-plugin: 将单个文件或整个目录复制到生成目录
  • webpack.BannerPlugin内置插件: 给输出的文件头部插入注释信息

安装:
npm i clean-webpack-plugin copy-webpack-plugin --save-dev

webpack配置:

   const CleanWebpackPlugin = require('clean-webpack-plugin')
   const CopyWebpackPlugin = require('copy-webpack-plugin')
   const webpack = require('webpack')
   module.exports = {
     entry: './src/index.js',
     output: {
       filename: 'app.js',
       path: path.resolve(__dirname, 'dist')
     },
     plugins: [
       new CleanWebpackPlugin('./dist'), // 也就是 output.path对应的目录, 相对路径
       new CopyWebpackPlugin([
         {
           from: './doc', // 从哪个文件夹copy内容
           to: './'  // copy到哪里, 默认为输出目录
         }
       ]),
       new webpack.BannerPlugin('⌚author: qiqingfu'), // 会将这段内容插入到打包后的js文件最前面
     ]
   }

webpack 监听文件变化配置

webpack 可以监听文件变化, 当它们重新修改后会重新编译。
启用 watch 模式, 它是一个 boolean类型的值, 默认为 false。当设置为 true, webpack将监听任何已解析文件的更改。
也可以使用 watchOptions来配置watch模式的选项。

module.exports = {
  // watch: true,  开启监听文件变化
  watchOptions: {
    aggregateTimeout: 1000, // 节流, 你这个文件修改后的一秒后,再进行构建
    poll: 1000, // 每秒检查一次变动
    ignored: /node_modules/ // 排除node_modules,监听大量文件系统会占用更多的CPU和内容消耗
  }
}

webpack 处理跨域问题

所谓同源是指,域名,协议,端口相同。任何一者不同都会产生跨域。

假如:
前端服务为 http: //localhost:8080
后端的连调服务器为: http://192.163.21.1:8082

前端请求后端提供的接口, 由于域名端口不同。所产生跨域的现象。

除了别的解决跨域的方式以外, 在webpack中也可以解决跨域的问题。

  • webpack.proxy 启用代理服务器。

  • webpack 中的钩子函数中自己mock数据

  • 在服务端启用 webpack

webpack.proxy 启用代理服务器

后端服务: http://localhost:3000

const express = require('express')
const app = express()
app.get('/qy/user', (req, res) => {
 console.log(req.url)
 res.json({
   name: 'qiqingfu',
   age: 21,
   job: 'web',
   city: 'QingDao'
 })
})
app.listen(3000,'localhost', () => {
 console.warn('port open success: 3000')
})

前端请求:

xhr.open('GET', '/api/qy/user', true)

xhr.onload = function () {
  console.log(xhr.response)
}
xhr.send()

webpack配置proxy代理

devServer: {
    contentBase: './dist',
    progress: true,
    compress: true,
    port: 8080,
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        pathRewrite: {"^/api": ""} // 将/api重写为""空字符串
      }
    }
  }

凡是接口以 /api开头的请求,都将其代理到后端的服务器上。http://localhost:3000

pathRewrite: {"^/api": ""}, 再将 /api重写掉。什么意思呢? 因为后端的接口为 /qy/user,我们用 /api开头只是为了统一管理, 如果不把/api重写掉,那发给后端的请求是 /api/qy/user,和后端的接口不匹配。会出问题的。

通过 webpack.devServer 的钩子函数, mock数据

webpack配置
before: 提供在服务器内部所有其他中间件之前执行自定义中间件的能力

   devServer: {
       contentBase: './dist',
       progress: true,
       compress: true,
       port: 8080,
       before: app => {
         app.get('/api/qy/user', (req, res) => {
           res.json({name: 'mock'})
         })
       }
     }

在服务端启用 webpack

需要weebpack插件: webpack-dev-middleware

server端配置:

const express = require('express')
const app = express()
const middle = require('webpack-dev-middleware')
const webpack = require('webpack')
const config = require('./webpack.config')

const comiler = webpack(config)

app.use(middle(comiler))

app.get('/qy/user', (req, res) => {
  res.json({
    name: 'qiqingfu',
    age: 21,
    job: 'web',
    city: 'QingDao'
  })
})

app.listen(3000,'localhost', () => {
  console.warn('port open success: 3000')
})

然后启动服务的时候会后续启动 webpack, 直接访问 http://localhost:3000, 可直接访问到数据

笔记地址

Webpack4 学习笔记七 跨域服务代理的更多相关文章

  1. 跨域学习笔记2--WebApi 跨域问题解决方案:CORS

    自己并不懂,在此先记录下来,留待以后学习... 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨 ...

  2. HTML5学习笔记:跨域

    在跨域安全性方面,有多个地方会有限制,主要是XMLHttpRequest对象的跨域限制和iFrame的跨域限制,下面我们分别来看一下. Ajax跨域(CORS) CORS是一个W3C标准,全称是&qu ...

  3. vue.js学习之 跨域请求代理与axios传参

    vue.js学习之 跨域请求代理与axios传参 一:跨域请求代理 1:打开config/index.js module.exports{ dev: { } } 在这里面找到proxyTable{}, ...

  4. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

  5. vue-cli 3.0之跨域请求代理配置及axios路径配置

    vue-cli 3.0之跨域请求代理配置及axios路径配置 问题:在前后端分离的跨域请求中,报跨域问题 配置: vue.config.js: module.exports = { runtimeCo ...

  6. Java IO学习笔记七:多路复用从单线程到多线程

    作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...

  7. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  9. 基于 HTTP 请求拦截,快速解决跨域和代理 Mock

    近几年,随着 Web 开发逐渐成熟,前后端分离的架构设计越来越被众多开发者认可,使得前端和后端可以专注各自的职能,降低沟通成本,提高开发效率. 在前后端分离的开发模式下,前端和后端工程师得以并行工作. ...

随机推荐

  1. 浅谈------location

    今天在上班的时候碰到了要根据不同的页面随机添加栏目的问题,很简单的问题,想到了判断页面url是否含有某字符串来进行随机添加栏目...这就需要了解location对象. location 属性名 属性说 ...

  2. Web开发HTTP中URI和URL的情感纠葛

    作者:郭无心链接:https://www.zhihu.com/question/21950864/answer/66779836来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. OLEDB 简单数据查找定位和错误处理

    在数据库查询中,我们主要使用的SQL语句,但是之前也说过,SQL语句需要经历解释执行的步骤,这样就会拖慢程序的运行速度,针对一些具体的简单查询,比如根据用户ID从用户表中查询用户具体信息,像这样的简单 ...

  4. TCP/IP五层模型详解

    将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理. 首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖 ...

  5. rest-framework框架——解析器、ur控制、分页、响应器、渲染器、版本

    一.解析器(parser) 解析器在reqest.data取值的时候才执行. 对请求的数据进行解析:是针对请求体进行解析的.表示服务器可以解析的数据格式的种类. from rest_framework ...

  6. 清除canvas画布内容--点擦除+线擦除

    清空canvas画布内容 1.重置宽或高 由于canvas每当高度或宽度被重设时,画布内容就会被清空,因此可以用以下方法清空:(此方法仅限需要清除全部内容的情况) var c=document.get ...

  7. 沙箱模式的chrome浏览器的运行

    getUserMedia在chrome 47后已经不可以从非安全源访问(Insecure Origins),但测试搭建apprtc时服务器一般没有添加HTTPS安全验证,chrome就没有权限访问麦克 ...

  8. Java中去除字符串中空格的方法

    昨天写了一个关于Excel文件处理的脚本,在字符串匹配功能上总是出现多余不正确的匹配,debug调试之后,发现一个坑. ------->代码中字符串使用了replaceAll()方法,去除了所有 ...

  9. Android学习——ViewPager的使用(三)

    这一节来介绍一下在ViewPager中常用到的一个控件,标题栏. 标题栏分为PagerTabStrip和PagerTitleStrip两种,用法类似,这里介绍第一种. 具体做法 在layout文件中的 ...

  10. java面试题全集(上)--java基础

    本文转载自:https://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - ...