webpack开启本地服务器与热更新

Posted zheoneandonly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack开启本地服务器与热更新相关的知识,希望对你有一定的参考价值。

  • 第一个webpack本地服务
  • webpack本地服务相关的一些操作指令与应用

 一、第一个webpack本地服务

//工作区间
    src//文件夹
        index.js//入口文件
        index.css//测试样式文件
        index.html//结构文件
    package.json//打包系统配置信息
    webpack.config.js//打包配置

需要下载安装的加载器和插件:

1 npm install webpack --save-dev
2 npm install webpack-cli --save-dev
3 npm install style-loader --save-dev
4 npm install css-loader --save-dev
5 npm install html-webpack-plugin --save-dev
6 npm install clean-webpack-plugin --save-dev
7 npm install webpack-dev-server -g
8 npm install webpack-dev-server -save-dev

一定要注意先在全局安装webpack-dev-server,然后再在局部工作区间安装。然后测试代码非常简单,只需要一个html默认生成结构,css给body设置背景色,然后再入口文件index.js中引入css文件。接着使用下面这份打包配置,如果对我前面博客的webpacd内容都有了解你会发现这是个最简单的配置:

 1 var path = require(‘path‘);
 2 var CleanWebpackPlugin = require(‘clean-webpack-plugin‘);
 3 var HtmlWebpackPlugin = require(‘html-webpack-plugin‘);
 4 module.exports = 
 5     entry:
 6         index:‘./src/index.js‘
 7     ,
 8     output:
 9         path:path.resolve(__dirname,‘dist‘),
10         filename:‘[name][hash:5].bundle.js‘
11     ,
12     module:
13         rules:[
14             
15                 test:/\\.css$/,
16                 use:[
17                     loader:‘style-loader‘,
18                     loader:‘css-loader‘
19                 ]
20             
21         ]
22     ,
23     plugins:[
24         new CleanWebpackPlugin(),
25         new HtmlWebpackPlugin(
26             template:‘./src/index.html‘
27         )
28     ],
29     mode:‘development‘
30 

执行:webpack测试是否配置成功,在配置成功的情况下执行下一行指令。

执行:webpack-dev-server。执行玩成功的话webpack就开始对作用域中的代码文件执行监听,控制台的指针一直处于闪烁状态。然后找到刚刚的执行说明,在说明里找到生成的本地端口链接,下面是我测试生成的端口链接截图(把链接直接粘贴进浏览器链接栏):

技术图片

你会发现链接的网页就是你刚刚编辑打包好的html页面,这时候再回到编辑器修改样式(修改body背景色),修改好以后保存,这时候页面会自动刷新,然后在测试js代码,在js中编辑一个console.log(‘hello’)打印指令,编辑后保存可以看到在浏览器控制自动打印了hello。以上的操作就是本地服务的功能,在很多公司中前端为了提高开发效率会使用双屏同时工作,一个编码一个展示时时的效果,就可以使用webpack-dev-server来实现。

既然是服务,当然少不了数据请求操作,接下来就使用以下ajax请求:

npm install jquery --save-dev

然后,将config文件中的清除打包文件的clean-webpack-plugin注释,因为需要再dist文件夹中缓存一个json文件,用来测试服务器数据请求(json文件的数据任意):

//        new CleanWebpackPlugin(),

然后启动服务并重新用新生成的链接打开页面(开启浏览器控制台):

webpack-dev-server

接着在编辑器中编辑index.js,写入一个jQuery的ajax请求来请求本地服务器中的JSON数据:

import ‘./index.css‘;
// var $ = require(‘jquery‘);
import $ from ‘jquery‘;
$.ajax(
    url:‘http://localhost:8081/dist/data.json‘,//注意这个路径是由生成的链接+打包文件夹路径+json文件名
    success:function(data)
        console.log(data);
    ,
    error:function()
        console.log(‘error‘);
    
)

当你编辑好index.js保存时就你会发现,可以的通过ajax向本地服务器发生请求。

 二、webpack本地服务相关的一些操作指令与应用

因为程序使用默认端口的原因,可能会出现端口冲突的问题,如果端口冲突的话可以再config.js文件中配置端口:

1 module.exports = 
2     devServer:
3         port:‘9091‘
4     
5 

将这个配置添加到配置文件中,就可以在指定的端口上开启服务,但是有一点需要注意的是,如果修改配置文件时服务是开启状态的话,并不会自动刷新,需要手动关闭当前监听,然后启动才会生效。(CTRL + C 热键关闭服务)

因为webpack本地服务监听项目代码,并不监听打包环境的config.js配置文件,所以需要重新开启服务。接着上面的配置,还可以添加一个配置属性来指定服务器地址,默认情况下服务器区间是在控制台开启服务的位置,由于这个区间就是工作区间,下面除了包含生成的代码dist文件夹,还有代码文件夹src和配置文件等,为了更好的区分服务器和开发环境可以添加以下配置:

技术图片
1     devServer:
2         port:‘9091‘,
3         contentBase:‘dist‘
4     ,
View Code

如果更改了服务器空间,那么ajax的请求就肯定需要改了,之前路径中的dist这层需要删除才能找到data.json。

url:‘http://localhost:9091/data.json‘,

到这一步是不是发现有一个操作很不方便,就是需要手动复制链接或者手动去浏览器输入链接,webpack怎么会这么不方便呢?下面这个指令帮你解决:

webpack-dev-server --open//开启本地服务器是自动在默认浏览器打开页面

由于开启服务后,每一次触发更新页面就在控制带打印出相关的信息,在调试中需要debug的话去查看控制台清一色的白色提示信息会让你很难受,这时候你只需要这样做:

webpack-dev-server --open --color

指令后面添加--color指令,控制台的提示信息就会有不同的颜色来区分不同的信息。

 三、热更新:hot module replace

前面介绍了开启本地服务和自动刷新页面,注意“自动刷新页面”这句话,在前端开发中对于这句话应该会非常敏感,因为刷新页面就意味着将数据全部重新请求一次,这种事情除了第一次请求页面以后就不应该出现在前端服务中,想想你每一次保存源代码文件都会触发一次所有网络请求、编译、执行,估计一天的工作时间就有一半的时间在等待页面刷新中了,在我们的测试代码中由于源代码体量非常小无法感知,如果在实际开发中你想想请求一个页面会有多大。这个问题的严重性说的比较多了,接下来来看webpack怎么实现局部刷新来解决性能问题:

通过webpack模块的内置插件开启css修改代码实现局部刷新:(在config配置文件中添加以下配置)

 1 var Webpack = require(‘webpack‘);//引入webpack模块
 2 ...
 3 module.exports = 
 4     plugins:[
 5         ...
 6         new Webpack.HotModuleReplacementPlugin()//引入局部刷新插件
 7     ],
 8     devServer:
 9         ...
10         hot:true//开启热更新
11     
12 

添加上面的配置以后,在开启服务更新css代码,就可以实现热更新(局部刷新),而不是刷新整个页面了。但是这个配置还不能解决js代码的局部刷新,js热更新需要以下配置:

js热更新只需要在前面配置的基础上,只需要在js中添加这段代码(提醒:添加在js代码文件中):

//判断是否开启热更新,如果开启了则对js文件执行热更新操作
if(module.hot)
    module.hot.accept();

识别js是否热更新,就看浏览器控制台的打印结果是否会在更新时被清空,如果每一次更新都清空就说明是页面刷新,如果是在原来的打印结果下面添加更新打印结果就开启了热更新。

最后提供配置文件代码和js代码:

技术图片
 1 var path = require(‘path‘);
 2 var CleanWebpackPlugin = require(‘clean-webpack-plugin‘);
 3 var HtmlWebpackPlugin = require(‘html-webpack-plugin‘);
 4 var Webpack = require(‘webpack‘);
 5 module.exports = 
 6     entry:
 7         index:‘./src/index.js‘
 8     ,
 9     output:
10         path:path.resolve(__dirname,‘dist‘),
11         filename:‘[name][hash:5].bundle.js‘
12     ,
13     module:
14         rules:[
15             
16                 test:/\\.css$/,
17                 use:[
18                     loader:‘style-loader‘,
19                     loader:‘css-loader‘
20                 ]
21             
22         ]
23     ,
24     plugins:[
25         // new CleanWebpackPlugin(),
26         new HtmlWebpackPlugin(
27             template:‘./src/index.html‘
28         ),
29         new Webpack.HotModuleReplacementPlugin()
30     ],
31     devServer:
32         port:‘9091‘,
33         contentBase:‘dist‘,
34         hot:true
35     ,
36     mode:‘development‘
37 
config配置文件代码
技术图片
 1 import ‘./index.css‘;
 2 // var $ = require(‘jquery‘);
 3 import $ from ‘jquery‘;
 4 $.ajax(
 5     url:‘http://localhost:9091/data.json‘,//注意这个路径是由生成的链接+打包文件夹路径+json文件名
 6     success:function(data)
 7         console.log(data);
 8     ,
 9     error:function()
10         console.log(‘error‘);
11     
12 )
13 console.log(‘热更新了吗?‘);
14 
15 //判断是否开启热更新,如果开启了则对js文件执行热更新操作
16 if(module.hot)
17     module.hot.accept();
18 
测试的js代码(最后全部的)

 

以上是关于webpack开启本地服务器与热更新的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot.05.SpringBoot本地测试与热部署

Webpack中的文件监听与热更新

Webpack中的文件监听与热更新

webpack怎么开启本地服务器

Webpack5中的文件监听与热更新

Webpack5中的文件监听与热更新