webpack开启本地服务器与热更新
- 第一个webpack本地服务
- webpack本地服务相关的一些操作指令与应用
一、第一个webpack本地服务
//工作区间
src//文件夹
index.js//入口文件
index.css//测试样式文件
index.html//结构文件
package.json//打包系统配置信息
webpack.config.js//打包配置
需要下载安装的加载器和插件:
npm install webpack --save-dev
npm install webpack-cli --save-dev
npm install style-loader --save-dev
npm install css-loader --save-dev
npm install html-webpack-plugin --save-dev
npm install clean-webpack-plugin --save-dev
npm install webpack-dev-server -g
npm install webpack-dev-server -save-dev
一定要注意先在全局安装webpack-dev-server,然后再在局部工作区间安装。然后测试代码非常简单,只需要一个html默认生成结构,css给body设置背景色,然后再入口文件index.js中引入css文件。接着使用下面这份打包配置,如果对我前面博客的webpacd内容都有了解你会发现这是个最简单的配置:
var path = require('path');
var {CleanWebpackPlugin} = require('clean-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry:{
index:'./src/index.js'
},
output:{
path:path.resolve(__dirname,'dist'),
filename:'[name][hash:5].bundle.js'
},
module:{
rules:[
{
test:/\.css$/,
use:[
{loader:'style-loader'},
{loader:'css-loader'}
]
}
]
},
plugins:[
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template:'./src/index.html'
})
],
mode:'development'
}
执行: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文件中配置端口:
module.exports = {
devServer:{
port:'9091'
}
}
将这个配置添加到配置文件中,就可以在指定的端口上开启服务,但是有一点需要注意的是,如果修改配置文件时服务是开启状态的话,并不会自动刷新,需要手动关闭当前监听,然后启动才会生效。(CTRL + C 热键关闭服务)
因为webpack本地服务监听项目代码,并不监听打包环境的config.js配置文件,所以需要重新开启服务。接着上面的配置,还可以添加一个配置属性来指定服务器地址,默认情况下服务器区间是在控制台开启服务的位置,由于这个区间就是工作区间,下面除了包含生成的代码dist文件夹,还有代码文件夹src和配置文件等,为了更好的区分服务器和开发环境可以添加以下配置:
devServer:{
port:'9091',
contentBase:'dist'
},
如果更改了服务器空间,那么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配置文件中添加以下配置)
var Webpack = require('webpack');//引入webpack模块
...
module.exports = {
plugins:[
...
new Webpack.HotModuleReplacementPlugin()//引入局部刷新插件
],
devServer:{
...
hot:true//开启热更新
}
}
添加上面的配置以后,在开启服务更新css代码,就可以实现热更新(局部刷新),而不是刷新整个页面了。但是这个配置还不能解决js代码的局部刷新,js热更新需要以下配置:
js热更新只需要在前面配置的基础上,只需要在js中添加这段代码(提醒:添加在js代码文件中):
//判断是否开启热更新,如果开启了则对js文件执行热更新操作
if(module.hot){
module.hot.accept();
}
识别js是否热更新,就看浏览器控制台的打印结果是否会在更新时被清空,如果每一次更新都清空就说明是页面刷新,如果是在原来的打印结果下面添加更新打印结果就开启了热更新。
最后提供配置文件代码和js代码:
var path = require('path');
var {CleanWebpackPlugin} = require('clean-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var Webpack = require('webpack');
module.exports = {
entry:{
index:'./src/index.js'
},
output:{
path:path.resolve(__dirname,'dist'),
filename:'[name][hash:5].bundle.js'
},
module:{
rules:[
{
test:/\.css$/,
use:[
{loader:'style-loader'},
{loader:'css-loader'}
]
}
]
},
plugins:[
// new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template:'./src/index.html'
}),
new Webpack.HotModuleReplacementPlugin()
],
devServer:{
port:'9091',
contentBase:'dist',
hot:true
},
mode:'development'
}
config配置文件代码
import './index.css';
// var $ = require('jquery');
import $ from 'jquery';
$.ajax({
url:'http://localhost:9091/data.json',//注意这个路径是由生成的链接+打包文件夹路径+json文件名
success:function(data){
console.log(data);
},
error:function(){
console.log('error');
}
})
console.log('热更新了吗?'); //判断是否开启热更新,如果开启了则对js文件执行热更新操作
if(module.hot){
module.hot.accept();
}
测试的js代码(最后全部的)
webpack开启本地服务器与热更新的更多相关文章
- rollup环境搭建(es6转es5、压缩、本地服务器、热更新)
文件目录 package.json { "name": "my-vue", "version": "1.0.0", &q ...
- 使用webpack构建本地服务器
想不想让你的浏览器监听你的代码的修改,并自动刷新显示修改后的结果,其实Webpack提供一个可选的本地开发服务器,这个本地服务器基于node.js构建,可以实现你想要的这些功能,不过它是一个单独的组件 ...
- webpack构建本地服务器
webpack构建本地服务器 想不想让你的浏览器监测你的代码的修改,并自动刷新修改后的结果,其实Webpack提供一个可选的本地开发服务器,这个本地服务器基于node.js构建, 可以实现你想要的这些 ...
- 在vue项目中添加一个html页面,开启本地服务器
在vue项目里新增一个不需要登录的页面,那么我只能新增一个html页面了,不经过路由,直接在浏览器输入路径打开,那么就需要用到本地服务器, 1.vue里面的html页面最好放过在public文件夹里面 ...
- Webpack多入口文件、热更新等体验
Webpack现今流行的前端打包工具,今儿本人也来分享下自己学习体验. 一.html-webpack-plugin 实现html模板文件的解析与生成 在plugins加入HtmlWebpackPlug ...
- 【转】tomcat搭建本地服务器 实现apk更新下载
转自:http://www.kankanews.com/ICkengine/archives/121748.shtml 做apk的更新下载功能,测试的时候需要个服务器. 所以就选用 Apache To ...
- [转]webpack配置本地服务器
亲测,webpack打包vue项目之后生成的dist文件可以部署到 express 服务器上运行. 我的vue项目结构如下: 1. 进入该vue项目目录,打开git bash,执行:npm run b ...
- koa和egg项目webpack热更新实现
背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack- ...
- Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇——多页面VueSSR+热更新Server)
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇--多页面VueSSR+热更新Server) @(HTML/JS) 这是Vue多页面框架系列文章的第二篇,上一篇(纯前 ...
随机推荐
- leetcode1283 使结果不超过阈值的最小除数
这道题第一思路是用二分查找 因为使用二分法:所以复杂度为O(n*logk), k介于 left=sum/threshold(向下取整) 和 right=num_max之间:而right<=10^ ...
- LC 813. Largest Sum of Averages
We partition a row of numbers A into at most K adjacent (non-empty) groups, then our score is the su ...
- 部署k8s时容器中ping不通
192.168.42.120 | UNREACHABLE! => { "changed": false, "msg": "Fail ...
- Elasticsearch 空值过滤
参考:https://blog.csdn.net/zhang862520682/article/details/80333196 参考:https://www.jianshu.com/p/7a5d70 ...
- hostname -i 出现0.0.0.0解决
[root@hostnametest4 ~]# hostname -i 0.0.0.0 原因:是因为四个节点中其中一个节点没有配置hosts解析,必须每个节点写全这四个ip,只要掉一个ip就会出现0. ...
- SQL引擎及事务支持
查看当前表引擎 SHOW CREATE TABLE table_name MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类 ...
- libev 源码解析
一 libev简介 libev是一个轻量级的事件通知库,具备支持多种事件通知能力,通过对libev的源码的阅读,可以清楚了解事件通知实现内部机制. 二 核心数据结构 在libev中关键的数据结构是, ...
- 【并行计算-CUDA开发】Apple's OpenCL——再谈Local Memory
在OpenCL中,用__local(或local)修饰的变量会被存放在一个计算单元(Compute Unit)的共享存储器区域中.对于nVidia的GPU,一个CU可以被映射为物理上的一块SM(Str ...
- Mac下Supervisor进程监控管理工具的安装与配置
Supervisor是一个类 unix 操作系统下的进程监控管理工具. Supervisor是由 Python 写成,可用 Python 的包安装管理工具 pip(Python Package Ind ...
- 2019牛客暑期多校训练营(第五场)- G subsequence 1
题目链接:https://ac.nowcoder.com/acm/contest/885/G 题意:给定字符串s,t,求s中满足字典序大于t的子序列的个数. 思路:组合数学+dp.当子序列长度大于m时 ...