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