在很多情况下,我们使用脚手架开发前端项目时会启动两个服务器使用proxy
进行代理,但是这样显然是不自然的,有强迫症的我肯定是无法接受这一点。
目前来看,React.js的create-react-app
以及Vue.js的vue-cli
脚手架,目前都是封装的基于webpack
打包的,所以我们完全可以使用webpack官方提供的中间件进行热开发webpack-dev-middleware
再配合社区提供的webpack-hot-middleware
,而不是使用webpack-dev-server
的同时启动我们自己的服务器,然后再配置代理。
但是,我们不想修改cra
官方为我们提供的配置,因为修改它我们需要enject
会使我们的目录解构发生混乱,不是很大的项目时仅为配置一个这个去enject
是非常低效的行为。索性我们可以曲线救国一下
双中间件
双中间件即配合webpack-hot-middleware
,
因为cra给我们的webpack默认配置就有HotModuleReplacementPlugin
所以我们只需要加上entry
就行了
process.env.NODE_ENV = 'development'; const webpack = require('webpack'); const express = require('express'); const configFactory = require('react-scripts/config/webpack.config'); const webpackDev = require("webpack-dev-middleware"); let config = configFactory('development'); config.entry = [config.entry, 'webpack-hot-middleware/client']; const compiler = webpack(config); const app = express(); app.use(webpackDev(compiler)) app.use(require("webpack-hot-middleware")(compiler)); app.listen(3000);
koa-webpack
由于我是koa用户,况且社区为Koa封装好了这两个中间件(webpack-dev-middleware
and webpack-hot-client
)后一个是前面说的webpack-hot-middle
的封装,他为我们提供了自动添加配置的能力
let config = configFactory('development'); config.entry = [config.entry, 'webpack-hot-middleware/client']; const middleware = await koaWebpack({ compiler, hotClient: { autoConfigure: false } }); const app = new Koa(); app.use(middleware); app.listen(3000, () => console.log('http://localhost:3000'));
craco
如果使用craco那就更简单了,craco提供了暴露webpack配置的api,同时我们也可以使用他的便利
const Koa = require('koa') const koaWebpack = require('koa-webpack') const cracoConfig = require('./craco.config') const { createWebpackDevConfig } = require('@craco/craco') ;(async () => { const config = createWebpackDevConfig(cracoConfig) const middleware = await koaWebpack({ config }) const app = new Koa() app.use(middleware) app.listen(3000, () => console.log('http://localhost:3000')) })()
然后我们直接在./craco.config
把多余的插件删了
module.exports = { webpack: { plugins: { remove: ['HotModuleReplacementPlugin'] } } }
文章评论
嗨,从可乐探针找到作者的博客。感觉瞬间眼前一亮,真的特别好的主题,可惜没看到任何开源的link,路过走过点个赞!
@多吉 谢谢支持,有人喜欢的话我可能会修改下开源,不过这个代码写的确实比较稀烂
想问这个blog是什么搭的呀,好看啊
@jonkxg84572 现在是WordPress Restful API作后端,前端是Vue + SSR,整体样式其实是大部分随便抄的摇曳百合动画的网站(逃)