摘要:把處理后的配置文件傳遞給服務(wù)器,不過我們在使用它之前,需要把它改造成中間件。因為通過生成的模塊是寫入到內(nèi)存中的,所以我們需要修改開發(fā)環(huán)境中的配置項修改此配置項安裝封裝成中間件。
前言
webpack提供了webpack-dev-server模塊來啟動一個簡單的web服務(wù)器,為了更大的自由度我們可以自己配置一個服務(wù)器,下面介紹如何用koa2來實現(xiàn)。
wepack-dev-middlewarewepack-dev-middleware把webpack處理后的配置文件傳遞給服務(wù)器,不過我們在使用它之前,需要把它改造成koa中間件。
安裝wepack-dev-middleware:
npm install wepack-dev-middleware -D
封裝成koa中間件。devMiddleware.js:
// 改造成koa中間件 const 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;webpack-hot-middleware
webpack-hot-middleware模塊主要用來實現(xiàn)熱替換,也就是說我們在修改文件后只需刷客戶端頁面就能看到效果了。因為通過webpack-hot-middleware生成的模塊是寫入到內(nèi)存中的,所以我們需要修改開發(fā)環(huán)境中的output配置項:
// webpack.dev.conf.js output: { filename: "[name].[hash].js", path: "/" // 修改此配置項 }
安裝webpack-hot-middleware:
npm install webpack-hot-middleware -D
封裝成koa中間件。hotMiddleware.js:
// 改造成koa中間件 const 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;koa2實現(xiàn)服務(wù)器
安裝koa:
npm install koa -D
server.js:
const Koa = require("koa"); const webpack = require("webpack"); // webpack模塊 const config = require("./webpack.dev.conf"); // 開發(fā)環(huán)境模塊 // 中間件容器,把webpack處理后的文件傳遞給一個服務(wù)器 const devMiddleware = require("./devMiddleware"); // 在內(nèi)存中編譯的插件,不寫入磁盤來提高性能 const hotMiddleware = require("./hotMiddleware"); const compiler = webpack(config); const app = new Koa(); app.use(devMiddleware(compiler, { publicPath: config.output.publicPath // "/" })); app.use(hotMiddleware(compiler)); app.listen(3000); console.log("lostening on port 3000");
配置package.json:
"scripts": { "server": "node server.js --mode development" }
啟動服務(wù)器:
npm run server通過koa2中間件配置
koa2社區(qū)也提供了封裝好的中間件,例如koa-webpack和koa-webpack-middleware,不過后者已經(jīng)好久沒有維護了,下面我們用koa-webpack來簡化配置。
安裝依賴:
npm install koa-webpack -D
修改server.js:
const Koa = require("koa"); const middleware = require("koa-webpack"); const webpack = require("webpack"); const config = require ("./webpack.dev.conf.js"); const compiler = webpack(config); const app = new Koa(); app.use(middleware({ compiler: compiler })); app.listen(3000); console.log("lostening on port 3000");
模塊版本:
"devDependencies": { "koa": "^2.5.0", "koa-webpack": "^3.0.0", "webpack": "^4.0.1", "webpack-cli": "^2.0.9", "webpack-dev-middleware": "^3.0.0", "webpack-hot-middleware": "^2.21.1", }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93159.html
摘要:四配置配置規(guī)則放在的數(shù)組里,每個是一個對象,是正則匹配,匹配文件后綴名,是要用是數(shù)組是所需要的是要加載哪些文件,是忽略掉哪些文件。實現(xiàn)解析,用會在寫入在文件頂端導(dǎo)入中加入插件。 最近研究webpack略有小成,特此寫篇博客。雖然webpack有官網(wǎng)api,但是個人認為webpack api一點都不人性化, 不自己研究研究,根本看不懂。今天先從寫webpack-dev-server開始。...
摘要:本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。若確認此次請求來自微信服務(wù)器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 一、簡介 關(guān)于微信公眾號的介紹就省略了,自行搜索。注冊過程也不說了。我們會直接注冊測試號來實現(xiàn)代碼。這將會是個全面講解微信公眾號開發(fā)的系列教程。本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。在開始之前最好去看看開發(fā)者文檔微信公眾平臺技術(shù)文...
摘要:基于構(gòu)建的服務(wù)器腳手架這是一個基于的輕量級腳手架,支持支持使用編寫。腳手架可以根據(jù)不同的環(huán)境配置不同的信息運行價值,支持開發(fā),測試,生產(chǎn)環(huán)境的不同參數(shù)配置。 #基于webpack構(gòu)建的 Koa2 restful API 服務(wù)器腳手架 這是一個基于 Koa2 的輕量級 RESTful API Server 腳手架,支持 ES6, 支持使用TypeScript編寫。 GIT地址:https...
摘要:如果你還不是很了解什么是同構(gòu),請先自行。現(xiàn)在市面上有很多優(yōu)秀同構(gòu)模板,但是其中有不少不能完美解決所有難題,只有其中一部分可以,但是這一部分模板卻又集成了很多難懂的黑科技,熟悉周期較長,且難以擴展和維護。 如果你還不是很了解什么是同構(gòu),請先自行Google。 現(xiàn)在市面上有很多優(yōu)秀同構(gòu)模板,但是其中有不少不能完美解決所有難題,只有其中一部分可以,但是這一部分模板卻又集成了很多難懂的黑科技,...
摘要:從第一個中間件開始執(zhí)行,遇到進入下一個中間件,一直執(zhí)行到最后一個中間件,在逆序,執(zhí)行上一個中間件之后的代碼,一直到第一個中間件執(zhí)行結(jié)束才發(fā)出響應(yīng)。 github地址: https://github.com/zdliuccit/... 歡迎star 該構(gòu)建適用PC端開發(fā),通過配置亦可支持移動端開發(fā) 具體以代碼為主,持續(xù)更新.... 技術(shù)棧 Webpack3 Koa2 Axios Vue...
閱讀 2488·2021-09-22 16:05
閱讀 2978·2021-09-10 11:24
閱讀 3647·2019-08-30 12:47
閱讀 2952·2019-08-29 15:42
閱讀 3394·2019-08-29 15:32
閱讀 1980·2019-08-26 11:48
閱讀 1096·2019-08-23 14:40
閱讀 908·2019-08-23 14:33