1.devServer.contentBase
 
它指定了服务器资源的根目录,如果不写入contentBase的值,那么contentBase默认是项目的目录。
在上面例子中产生错误和后来解决错误的原因:
产生错误:因为bundle.js被"放在了"我们的项目根目录里,在dist/html里<script src="./bundle.js"></script>此时显然不能根据路径找到bundle.js
解决错误:通过配置contentBase: path.join(__dirname, "dist")将bundle.js"放在了"dist目录下,此时bundle.js和dist/index.html位于同一目录下,通过 src="./bundle.js"自然就找到bundle.js了
 
webpack打包和webpack-dev-server开启服务的区别——
webpack输出真实的文件,而webpack-dev-server输出的文件只存在于内存中,不输出真实的文件!(注意下面两张图的区别)
 
webpack:当我们在终端运行"webpack"后:

webpack-dev-server:当我们在终端运行"node_modules/.bin/webpack-dev-server后:
这也就是我在上面的阐述中将bundle.js"放在了"加上双引号的原因
 
 
  1. 你要提供哪里的内容给虚拟服务器用。这里最好填 绝对路径。
  2.  
  3. // 单目录
  4. contentBase: path.join(__dirname, "public")
  5.  
  6. // 多目录
  7. contentBase: [path.join(__dirname, "public"), path.join(__dirname, "assets")]
  8. 默认情况下,它将使用您当前的工作目录来提供内容。
 
2.devServer.port
port配置属性指定了开启服务的端口号:
  1. devServer: {
  2. port:7000
  3. }
设置端口号为7000:
运行:node_modules/.bin/webpack-dev-server
这个时候就不是默认的8080的端口了,而是我们设置的7000
 
3.devServer.host
host设置的是服务器的主机号:
修改配置为:
  1. devServer: {
  2. contentBase: path.join(__dirname, "dist"),
  3. port:7000,
  4. host:'0.0.0.0'
  5. }
此时localhost:7000和0.0.0.0:7000都能访问成功
 
4.devServer.historyApiFallback
在文档里面说的很清楚,这个配置属性是用来应对返回404页面时定向到特定页面用的(the index.html page will likely have to be served in place of any 404 responses)
在dist目录下新增一个HTML页面:
  1. /*剩下的都是很常规的HTML内容,故省略*/
  2. <p>这里是404界面</p>
 
我们把webpack.config.js修改如下:
  1. module.exports = {
  2. /*这里省略entry和output,参照上面写的内容*/
  3. devServer: {
  4. contentBase: path.join(__dirname, "dist"),
  5. historyApiFallback:{
  6. rewrites:[
  7. {from:/./,to:'/404.html'}
  8. ]
  9. }
  10. }
  11. }
 
打开页面,输入一个不存在的路由地址:
 
 
  1. 如果为 true ,页面出错不会弹出 页面。
  2. 如果为 {...} , 看看一般里面有什么。
  3.  
  4. rewrites
  5. rewrites: [
  6. { from: /^\/subpage/, to: '/views/subpage.html' },
  7. {
  8. from: /^\/helloWorld\/.*$/,
  9. to: function() {
  10. return '/views/hello_world.html;
  11. }
  12. }
  13. ]
  14. // 从代码可以看出 url 匹配正则,匹配成功就到某个页面。
  15. // 并不建议将路由写在这,一般 historyApiFallback: true 就行了。
  16. verbose:如果 true ,则激活日志记录。
  17. disableDotRule: 禁止 url 带小数点 . 。
 
5.watchOptions (文档
  • 一组自定义的监听模式,用来监听文件是否被改动过。
  1. watchOptions: {
  2. aggregateTimeout: 300,
  3. poll: 1000
  4. ignored: /node_modules/
  5. }
  1. aggregateTimeout:一旦第一个文件改变,在重建之前添加一个延迟。填以毫秒为单位的数字。
  2. ignored:观察许多文件系统会导致大量的CPU或内存使用量。可以排除一个巨大的文件夹。
  3. poll:填以毫秒为单位的数字。每隔(你设定的)多少时间查一下有没有文件改动过。不想启用也可以填false
 
 

6.proxy (文档)

  • 当您有一个单独的API后端开发服务器,并且想要在同一个域上发送API请求时,则代理这些 url 。看例子好理解。
  1. proxy: {
  2. '/proxy': {
  3. target: 'http://your_api_server.com',
  4. changeOrigin: true,
  5. pathRewrite: {
  6. '^/proxy': ''
  7. }
  8. }
  1. 假设你主机名为 localhost:8080 , 请求 API 的 url 是 http://your_api_server.com/user/list
  2. '/proxy':如果点击某个按钮,触发请求 API 事件,这时请求 url 是http://localhost:8080/proxy/user/list
  3. changeOrigin:如果 true ,那么 http://localhost:8080/proxy/user/list 变为 http://your_api_server.com/proxy/user/list 。但还不是我们要的 url 。
  4. pathRewrite:重写路径。匹配 /proxy ,然后变为'' ,那么 url 最终为 http://your_api_server.com/user/list 。
 
 

7.publicPath (文档

  • 配置了 publicPath后, url = '主机名' + 'publicPath配置的' +
    '原来的url.path'
    。这个其实与 output.publicPath 用法大同小异。
  • output.publicPath 是作用于 js, css, img 。而 devServer.publicPath 则作用于请求路径上的。
  1. // devServer.publicPath
  2. publicPath: "/assets/"
  3. // 原本路径 --> 变换后的路径
  4. http://localhost:8080/app.js --> http://localhost:8080/assets/app.js

 

 
 
8.devServer.overlay
 
  • 如果为 true ,在浏览器上全屏显示编译的errors或warnings。默认 false (关闭)
  1.  
  • 如果你只想看 error ,不想看 warning
  1. overlay:{
  2. errorstrue
  3. warningsfalse
  4. }

配置属性用来在编译出错的时候,在浏览器页面上显示错误,默认是false,可设置为true

首先我们人为制造一个编译错误:在我们尚未配置babel loader的项目里使用ES6写法:
在src/index.js里写入“const a”
在shell里提示编译错误:
 
但在浏览器里没有提示:
所以我们把webpack.config.js修改为:
  1. module.exports = {
  2. /*这里省略entry和output,参照上面写的内容*/
  3. devServer: {
  4. contentBase: path.join(__dirname, "dist"),
  5. overlay: true
  6. }
  7. }
 
再重新运行node_modules/.bin/webpack-dev-server,浏览器上把错误显示出来了

9.devServer.stats(字符串)
 
这个配置属性用来控制编译的时候shell上的输出内容,我们没有设置devServer.stats时候编译输出是这样子的:
(其中看起来有许多看似不重要的文件也被打印出来了)

stats: "errors-only"表示只打印错误:
我们把配置改成:
  1. devServer: {
  2. contentBase: path.join(__dirname, "dist"),
  3. stats: "errors-only"
  4. }
 
因为只有错误才被打印,所以,大多数信息都略过了
除此之外还有"minimal","normal","verbose",这里不多加赘述
 
10.devServer.quiet
true,则终端输出的只有初始启动信息。 webpack 的警告和错误是不输出到终端的
当这个配置属性和devServer.stats属于同一类型的配置属性
当它被设置为true的时候,控制台只输出第一次编译的信息,当你保存后再次编译的时候不会输出任何内容,包括错误和警告
来做个对比吧:
quiet:false(默认):
第一次编译:
第二次编译(当你保存的时候)

quiet:true

第一次编译同上
第二次编译什么都不输出
 
11.devServer.compress
这是一个布尔型的值,当它被设置为true的时候对所有的服务器资源采用gzip压缩
采用gzip压缩的优点和缺点:
优点:对JS,CSS资源的压缩率很高,可以极大得提高文件传输的速率,从而提升web性能
缺点:服务端要对文件进行压缩,而客户端要进行解压,增加了两边的负载
 
12.devServer.hot和devServer.inline
在这之前,首先要说一下的是webpack-dev-server的自动刷新和模块热替换机制
 

webpack-dev-server的自动刷新和模块热替换机制 ,这两个机制是紧紧联系在一起的

 
从外部角度看——自动刷新
当我们对业务代码做了一些修改然后保存后(command+s),页面会自动刷新,我们所做的修改会直接同步到页面上,而不需要我们刷新页面,或重新开启服务
(The webpack-dev-server supports multiple modes to automatically refresh the page)
 
从内部角度看——模块热替换
在热替换(HMR)机制里,不是重载整个页面,HMR程序会只加载被更新的那一部分模块,然后将其注入到运行中的APP中
(In Hot Module Replacement, the bundle is notified that a change happened. Rather than a full page reload, a Hot Module Replacement runtime could then load the updated modules and inject them into a running app.)
 
webpack-dev-server有两种模式可以实现自动刷新和模块热替换机制
1. Iframe mode(默认,无需配置)
页面被嵌入在一个iframe里面,并且在模块变化的时候重载页面
2.inline mode(需配置)添加到bundle.js中
当刷新页面的时候,一个小型的客户端被添加到webpack.config.js的入口文件中
例如在我们的例子中,在使用inline mode的热替换后,相当于入口文件从
  1. entry:{
  2. app:path.join(__dirname,'src','index.js')
  3. }
变成了:
  1. entry:{
  2. app:[path.join(__dirname,'src','index.js'),
  3. 'webpack-dev-server/client?http://localhost:8080/'
  4. ]
  5. }
从一个入口变成了两个入口,并实现刷新
 
那怎么才能inline mode模式的刷新呢?
 
你需要做这些:
1在配置中写入devServer.hot:true和devServer.inline:true
2增加一个插件配置webpack.HotModuleReplacementPlugin()
 
例如:
  1. var webpack = require('webpack')
  2. module.exports = {
  3. /*省略entry ,output等内容*/
  4. plugins:[
  5. new webpack.HotModuleReplacementPlugin()
  6. ],
  7. devServer: {
  8. inline:true,
  9. hot:true
  10. }
  11. }
 
打开页面:
如果有上面两行输出则表明你已经配置成功
 
 

详解webpack-dev-server的配置属性的更多相关文章

  1. 笔记:配置 webpack dev server

    笔记:配置 webpack dev server 安装 webpack-dev-server 组件 配置 webpack.config.js 配置 增加 html-webpack-plugin 组件 ...

  2. 配置Webpack Dev Server 实战操作方法步骤

    本文摘要:配置 Webpack Dev Server 可以解决本地开发前端应用时,手动执行 webpack 命令或 yarn build 命令,再去浏览器中访问 dist/index.html 的麻烦 ...

  3. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  4. [Webpack] Access Webpack Dev Server from Mobile Safari on an iPhone

    Testing your sites on mobile devices is a critical part of the development process. Webpack dev serv ...

  5. 详解Springboot中自定义SpringMVC配置

    详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ​ 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需 ...

  6. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  7. 详解nohup /dev/null 2>&1 含义的使用

    https://www.jb51.net/article/169837.htm 这篇文章主要介绍了详解nohup /dev/null 2>&1 含义的使用,文中通过示例代码介绍的非常详细 ...

  8. 详解Tomcat 配置文件server.xml

    前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的 ...

  9. NHibernate实战详解(二)映射配置与应用

    关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...

  10. Android Studio3.0的下载及其安装详解加eclipse下载安装配置jdk9

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 今天我们来讲解如何下载android studio 3.0及其 ...

随机推荐

  1. Ubuntu 开机启动不执行

    解决方案: 1.将/etc/rc.local的命令改成更加兼容的模式,将"#!/bin/sh"改为"#!/bin/bash" 2.将/bin/sh重新链接到/b ...

  2. C++输入密码不显示明文

    之前有遇到需求说输入密码不显示明文,但同时会有一些其他问题,暂时没做,如今经过尝试可以实现,但是得先知道要输入的是密码.主要利用的getch()函数的不回显特点.需要注意的是这个函数不是标准函数,而且 ...

  3. DeepFaceLab小白入门(3):软件使用!

    换脸程序执行步骤,大部分程序都是类似.DeepFaceLab 虽然没有可视化界面,但是将整个过程分成了8个步骤,每个步骤只需点击BAT文件即可执行.只要看着序号,一个个点过去就可以了,这样的操作应该不 ...

  4. python导出开发环境

    1.导出开发环境的依赖包 本地开发完后,再把代码给别人之前,需要 pip freeze > pip123.txt 2.其他环境安装依赖包 pip install -r pip123.txt 其他 ...

  5. python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print(' ...

  6. python输出mssql 查询结果示例

    # -*- coding: utf-8 -*-# python 3.6import pymssql conn=pymssql.connect(host='*****',user='******',pa ...

  7. stm32L0系列学习(一)

    开发用到的具体芯片是stm32L011F3 stm32L0总体特性,定位: 可见容量是比较少的,功耗很低,adc12位,7种低功耗模式 jlink和sdk的引脚关系图: HAL的库框图 官方给出的HA ...

  8. linux用户和用户组管理详解

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  9. spring boot配置

    spring.application.name=XXXXXserver.port=9515 # health显示down的问题endpoints.health.sensitive= falsemana ...

  10. 性能学习之--loaderunner压测

    打开一个脚本,tools-create Controllwer Scenario,开始场景的设计 一.场景设计--手工测试 1.初始化 2.start vu 一般选择simultaneously,用户 ...