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多页面框架系列文章的第二篇,上一篇(纯前 ...
随机推荐
- Sublime text3中文版 无法安装插件There are no packages available for installation问题的解决。
说起来差点没被气死,我当时的情况已经是要疯了,连他们的域名都ping不通,我还想着,咋地,要倒闭了? 首选项->插件设置->Package Control->默认 里边的这个配置项 ...
- weight权重的属性
权重是把屏幕剩余空间按比例分配 控件使用0dp,则实际的宽度比就等于权重比 控件wrap_content,那么权重越大,位置占的越多,再小不过wrap_content 控件match_parent,那 ...
- visible,invisible和GONE的区别
在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible ”.“invisible”.“gone”.主要用来设置控制控件的显示和隐藏.有些人可能会疑惑In ...
- Lucence简单学习---1
package cn.itheima.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; i ...
- 使用 DrMemory 详细教程
Dr Memory 简介 Dr. Memory 是一个开源免费的内存检测工具,它能够及时发现内存相关的编程错误,比如未初始化访问.内存非法访问以及内存泄露等.它不仅能够在 Linux 下面工作,也能在 ...
- 全部二进制脚本高可用--只有docker启动未成功
[root@test1 script]# cat k8s-docker-binary-py #!/usr/bin/python # -*- coding: utf-8 -*- from __futur ...
- JavaScript基本入门02
目录 JavaScript基础入门 02 条件语句 if 语句 if .. else 语句 switch 结构 循环语句 while 循环 continue 关键字 do...while语句 for ...
- 小米6使用charles抓包https
1. 下载charles 地址: https://zhubangbang.com/charles-crack-version-free-download-and-install-tutorial.ht ...
- 【CSS】我的颜色到底听谁的?—— css的层叠性
我们之前学了很多个选择器,都可以帮我们定位到具体标签上,然后我们在设置样式.但这也不可避免会产生一个问题:如果多个选择器同时指向同一个标签,那么到底该听谁的??? css一定有自己的机制来处理这个问题 ...
- cobaltr strike入门使用教程-1
前言 Cobalt Strike分为服务端和客户端两个部分从而实现分布式操作,协同作战.工具有linux和windows版本. 1.创建服务端 找到解压目录进入 ./teamserver [IP] [ ...