Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req
)), 响应对象(response object (res
)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next
的变量。
中间件的功能包括:
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
如果当前中间件没有终结请求-响应循环,则必须调用 next()
方法将控制权交给下一个中间件,否则请求就会挂起。
使用可选则挂载路径,可在应用级别或路由级别装载中间件。另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。
http://www.expressjs.com.cn/guide/using-middleware.html
中间件:
通过watch mode,监听资源的变更,然后自动打包(如何实现,见下文详解);快速编译,走内存;返回中间件,支持express的use格式。特别注明:webpack明明可以用watch mode,可以实现一样的效果,但是为什么还需要这个中间件呢?
答案就是,第二点所提到的,采用了内存方式。如果,只依赖webpack的watch mode来监听文件变更,自动打包,每次变更,都将新文件打包到本地,就会很慢。
從頭說起的話就是 webpack
本身只負責打包編譯的功能 bundle
, webpack-dev-server
當然就是協助我們開發的伺服器,這個伺服器底層是靠 express 來實作的,接著思考一下我們要如何更新(live reload)呢? 當然是需要取得 webpack 編好的資料啊,於是就需要在從 request
到 response
的過程中透過 express 的 middleware 取得資料,而方法就是透過 webpack-dev-middleware 。
比起直接編譯成檔案,webpack-dev-middleware 這個套件還多了一些好處:https://segmentfault.com/a/1190000005614604?_ea=868190
-
不需要一直寫入磁碟,所有產生的結果會直接存在記憶體
-
在監視模式(watch mode)下如果檔案發生異動,middleware 會馬上停止提供舊版的 bundle 並且會延遲請求的回應直到編譯完成,如此一來我們就不需要去
觀察編譯是否結束了