首页 技术 正文
技术 2022年11月13日
0 收藏 589 点赞 4,210 浏览 2082 个字

网上有很多express+webpack的热更新,但是koa2的很少,这两天研究了一下子,写一个简单的教程。

1、需要的包

  1. webpack:用于构建项目
  2. webpack-dev-middleware:用于处理静态文件
  3. webpack-hot-middleware:用于实现无刷新更新

2、webpack.config配置

  1. entry配置webpack-hot-middleware脚本
entry: {
app:["webpack-hot-middleware/client?noInfo=true&reload=true","./src/module1.js","./src/module2.js"],
app2:["webpack-hot-middleware/client?noInfo=true&reload=true","./src/module2.js","./src/module3.js"]
}
  1. plugins配置HotModuleReplacementPlugin插件用于热更新
plugins: [
new webpack.HotModuleReplacementPlugin()
]

3. koa2支持的中间件webpack-dev-middleware的实现

// devMiddleware.jsconst webpackDev  = require('webpack-dev-middleware')const devMiddleware = (compiler, opts) => {
const middleware = webpackDev(compiler, opts)
return async (ctx, next) => {
await middleware(ctx.req, {
end: (content) => {
ctx.body = content
},
setHeader: (name, value) => {
ctx.set(name, value)
}
}, next)
}
}module.exports=devMiddleware;

4. koa2支持的中间件webpack-hot-middleware的实现

// hotMiddleware.jsconst webpackHot = require('webpack-hot-middleware')
const PassThrough = require('stream').PassThrough;const hotMiddleware = (compiler, opts) => {
const middleware = webpackHot(compiler, opts);
return async (ctx, next) => {
let stream = new PassThrough()
ctx.body = stream
await middleware(ctx.req, {
write: stream.write.bind(stream),
writeHead: (status, headers) => {
ctx.status = status
ctx.set(headers)
}
}, next)
}}module.exports = hotMiddleware;

5. koa2实现添加中间件

const Koa = require('koa');
const app = new Koa();
const serve = require('koa-static');const webpack = require("webpack");
const webpackConfig = require("./webpack.config");
const devMiddleware = require("./devMiddleware");
const hotMiddleware = require('./hotMiddleware');const compiler = webpack(webpackConfig);app.use(devMiddleware(compiler));
app.use(hotMiddleware(compiler));app.use(serve(__dirname + "/dist/", {extensions: ['html']}));app.listen(3000, () => {
console.log('app listen at 3000')
});

6 package.json附上,版本不同可能会导致乱七八糟的问题,所以给上能用的版本。

{
"name": "demo",
"version": "1.0.0",
"main": "index.js",
"repository": "",
"author": "",
"license": "MIT",
"dependencies": {
"html-webpack-plugin": "^2.29.0",
"koa": "^2.3.0",
"koa-static": "^4.0.1",
"webpack": "^3.3.0",
"webpack-dev-middleware": "^1.11.0",
"webpack-hot-middleware": "^2.18.2"
}
}

ok,现在可以运行了

下一篇: maven国内镜像
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,903
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,429
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,245
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,057
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,689
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,726