webpack学习(二)---devServer

201 阅读3分钟

webpack学习2

webpack开发环境配置

1.文件监听与webpack-dev-server

文件监听

在修改项目代码时,避免了重新更改带来的需要重新配置问题 做法:在命令行输入 npx webpack --watch,这种模式开发中并不常见

webpack-dev-server的安装与启动

webpack-dev-server是webpack官方提供的一个Webpack服务工具;安装并启用webpack-dev-server后,其会在本地开启一个网络服务器用来处理网络请求。webpack-dev-server支持热部署、跨域代理、数据模拟等等。

安装:npm i -D wevpack-dev-server

启动:通过cli方式:npx webpack-dev-server

webpack-dev-server的常用参数

webpack-dev-server的自定义参数项在配置文件里的devServer里进行配置,如,常见配置:

devServer:{
    open:true,
    compress:true,
    hot:false,
    historyApiFallback:true,
    publicPath:'/',
    port:8089
}

每次修改devServer配置后,都需要重新启动服务器。

open

用来配置webpack-dev-server开启本地web服务后是否自动打开浏览器,默认值是false;

hot

其用来配置webpack的模块热替换功能(Hot Module Replacement)

historyApiFallback

若该选项值为true:当在浏览器输入地址,找不到对应的页面或服务时,会直接将index.html页面渲染出来。 这里需要涉及到路由相关的知识。 前端路由有两种模式:hashhistory,history模式下如果刷新浏览器,其会按照路径发送真实的资源请求,如果这个路径是前端配置的,服务端未进行配合处理时,就会返回404。为了解决history模式下的这个问题,配置historyApiFallback参数为true,解决404问题。

该参数的值有如下几种情况:

  • boolean:默认false;
  • object类型的值:配置rewrites属性:
historyApiFallback: {
  rewrites: [
    {
      from: /.*/,
      to: path.posix.join(config.dev.assetsPublicPath, "index.html")
    }
  ]
},
port

通过配置port参数,可以指定web服务运行的端口号

compress

设定是否为静态资源开启Gzip压缩

publicPath

2.模块热更新(热替换)

模块热替换---hot module replacement(HMR),该方式相比使用webpack-dev-server实现自动刷新整个页面的功能更加高效:其只加载修改过的模块从而实现实时预览。

要开启webpack的模块热替换功能,只需要将devServer中的hot参数改为true即可,其会自动添加webpack.HotModuleReplacementPlugin插件,但是在前端项目中需要使用者进行触发。

3.webpack中的source map

什么是source map

在打包好运行的JS代码已经不再是原始的文件代码,打包后的代码十分冗余不适合开发调试。因此想要在浏览器里直接看到打包前的代码,就需要使用source mapsource map是一个单独的文件,浏览器可以通过它还原出编译前的原始代码,其本质上是打包文件和源码的一个映射关系,将浏览器解析的dist目录下对应的报错的代码行转换为src目录下对应文件的代码行。devtool用于控制是否生成,以及如何生成source map。

开启source map功能: devtool:'source-map'

image.png 当devtool的值是'source-map'时将生成单独的source map文件,如上图所示

devtool的其他配置项

可以参考 选项

开发环境与生产环境下的devtool

  • 生产环境下通常使用none(或者省略devtool选项),不生产source map,从而避免源码泄露的危险;或者对服务器进行配置不允许普通用户访问source map文件;
  • 开发环境下通常设置devtool为:eval-cheap-module-source-map