1. 程式人生 > >webpack-dev-server 摘自webpack官網

webpack-dev-server 摘自webpack官網

webpack-dev-server是一個小型的node.js Express伺服器,它使用webpack-dev-middleware中介軟體來為通過webpack打包生成的資原始檔提供Web服務。它還有一個通過Socket.IO連線著webpack-dev-server伺服器的小型執行時程式。webpack-dev-server傳送關於編譯狀態的訊息到客戶端,客戶端根據訊息作出響應。

簡單來說,webpack-dev-server就是一個小型的靜態檔案伺服器。使用它,可以為webpack打包生成的資原始檔提供Web服務。那麼,它能給開發帶來什麼便利呢?

第一 webpack-dev-server有兩種模式支援自動重新整理——iframe模式和inline模式。在iframe模式下:頁面是巢狀在一個iframe下的,在程式碼發生改動的時候,這個iframe會重新載入;在inline模式下:一個小型的webpack-dev-server客戶端會作為入口檔案打包,這個客戶端會在後端程式碼改變的時候重新整理頁面。

  • 使用inline模式有兩種方式:命令列方式和Node.js API。
    1) 命令列方式比較簡單,只需加入--line選項即可。例如:
    webpack-dev-server --inline
    使用--inline選項會自動把webpack-dev-server客戶端加到webpack的入口檔案配置中。
    注意:使用webpack-dev-server命令列的時候,會自動查詢名為webpack.config.js的配置檔案。如果你的配置檔名稱不是webpack.config.js,需要在命令列中指明配置檔案。例如,我的配置檔案是webpack.config.dev.js:webpack-dev-server --inline --config webpack.config.dev.js

    2) Node.js API方式需要手動把webpack-dev-server/client?http://localhost:8080加到配置檔案的入口檔案配置處,因為webpack-dev-server沒有inline:true這個配置項。

第二 webpac-dev-server支援Hot Module Replacement,即模組熱替換,在前端程式碼變動的時候無需整個重新整理頁面,只把變化的部分替換掉。使用HMR功能也有兩種方式:命令列方式和Node.js API。

  • 命令列方式同樣比較簡單,只需加入--line --hot選項。--hot這個選項幹了一件事情,它把webpack/hot/dev-server

    入口點加入到了webpack配置檔案中。這時訪問瀏覽器,你會看見控制檯的log資訊:

    [HMR] Waiting for update signal from WDS...
    [WDS] Hot Module Replacement enabled.

    HMR字首的資訊由webpack/hot/dev-server模組產生,WDS字首的資訊由webpack-dev-server客戶端產生。

  • Node.js API方式需要做三個配置:
    1) 把webpack/hot/dev-server加入到webpack配置檔案的entry項;
    2) 把new webpack.HotModuleReplacementPlugin()加入到webpack配置檔案的plugins項;
    3) 把hot:true加入到webpack-dev-server的配置項裡面。

注意:要使HMR功能生效,還需要做一件事情,就是要在應用熱替換的模組或者根模組裡面加入允許熱替換的程式碼。否則,熱替換不會生效,還是會重刷整個頁面。下面是摘自webpack在github上docs的原話:

A module can only be updated if you "accept" it. So you need to module.hot.accept the module in the parents or the parents of the parents... I. e. a Router is a good place or a subview.

具體的程式碼是:

if(module.hot)
    module.hot.accept();

也可以使用一些外掛去完成這個工作,例如webpack-module-hot-accept外掛。不過,webpack-dev-server HMR結合react-hot-loader使用的時候,react-hot-loader會去做這個工作。

綜合上述兩點,使用wepack-dev-server輔助開發,使得開發者在開發前端程式碼的過程中無需頻繁手動重新整理頁面,使用HMR甚至不用等待頁面重新整理,確實可以給開發者帶來很好的體驗。

但是,問題又來了。我要進行前後端聯調的時候怎麼辦呢?畢竟webpack-dev-server只是一個靜態檔案伺服器,不具備動態處理的能力。這個時候就需要將後端伺服器與webpack-dev-server結合使用了。webpack-dev-server只用來為webpack打包生成的資原始檔提供服務,比如js檔案、圖片檔案、css檔案等;後端伺服器除提供API介面外,還提供入口HTML。

要將webpack-dev-server與後端伺服器結合使用,需要做三件事情。
第一 首頁HTML檔案是從後端伺服器發出的,這時頁面的根地址變成了後端伺服器地址,怎麼使得webpack產生的資原始檔在請求資源的時候是向web-dev-server請求而不是後端伺服器請求?只需在webpack配置檔案中的output.publicPath配置項寫上絕對URL地址,例如output.publicPath = "http://localhost:8080/assets/"。這時,webpack打包產生的資原始檔裡面的url地址都會是絕對地址,而不是相對地址。
第二 後端伺服器產生的入口HTML檔案要向webpack-dev-server請求資原始檔,這個簡單,只需在HTML檔案中加入資原始檔的絕對地址,例如:<script src="http://localhost:8080/assets/bundle.js">
第三 要使webpack-dev-server和它的執行時程式連線起來。這個簡單,只需要使用iline模式即可。

OK,things done!

最後再插一句,我在將HMRreact-hot-loader結合使用的時候遇到了熱替換不起作用的問題,即改變前端程式碼之後頁面不是熱替換而是沖刷。我在這裡找到了答案。
react-hot-loader/docs/troubleshooting.md


相關推薦

webpack-dev-server 摘自webpack

webpack-dev-server是一個小型的node.js Express伺服器,它使用webpack-dev-middleware中介軟體來為通過webpack打包生成的資原始檔提供Web服務。它還有一個通過Socket.IO連線著webpack-dev-server

webpack-dev-server啟動失敗

target href -s 失敗 http ima pack pac html 學習webpack-dev-server過程中,項目路徑下執行webpack-dev-server,老是報錯,原來是配置項在colors在webpack2.0以上版本不需要進行配置了,

webpack基礎+webpack配置文件常用配置項介紹+webpack-dev-server

建議 每次 alt fig out 添加 pre 補充 字符串 一.webpack基礎   1.在項目中生成package.json:在項目根目錄中輸入npm init,根據提示輸入相應信息。(也可以不生成package.json文件,但是package.json是很有用的

webpack-dev-server開發時代理,決解開發時跨域問題

端口 dex lba save progress 重要 less span npm 一、設置代理的原因 現在對前端開發的要求越來越高,並且隨著自動化以及模塊化的 誕生,前後端開發模式越來越流行。後端只負責接口,前端負責數據展示、邏輯處理。但是前後端開發模式,有一個重要的問題

webpack-dev-server 無法通過ip訪問

color -s onf gre ogr uil class 生成 pts 使用Vue-cli生成的webpack腳手架,之前一直是可以通過本地ip + 端口來訪問的。今天忽然不可以,百度一下才知道缺少了host參數。 打開package.json。在.scripts.de

'webpack-dev-server' 不是內部或外部命令,也不是可運行的程序

解決 dev bsp blog log 再次 裝包 全局 pac 今天新初始的項目遇到這個問題,記錄如下: 1. 這個錯誤與全局安裝webpack-dev-server無關,不必進行全局安裝 2. 原因可能是:   npm或yarn安裝包(當前項目),安裝中報錯,例如nod

[轉] webpack3最新版本配置研究(五) devtool,webpack-dev-server,CommonsChunkPlugin

war () 最新版本 獲取 報錯 key num clas 容易 devtool devtool是webpack中config自帶的屬性只要使用就可以了不用安裝 webpack官網的解釋如下 當 webpack 打包源代碼時,可能會很難追蹤到錯誤和警告在源代碼中的原始位

webpack-dev-server配置指南webpack3.0

tput image led 替換 conf 朋友 div bundle 不知道 最近正在研究webpack,聽說webpack可以自己搭建一個小型的服務器(使用過vue-cli的朋友應該都見識到過),所以迫不及待的想要嘗試一下。不過,在實際操作中發現,用webpack搭建

Vue 項目: npm run dev b報錯 “'webpack-dev-server' 不是內部或外部命令,也不是可運行的程序 或批處理文件。”

output 安裝 modules RR module -i progress his dev 前提: 電腦已經安裝了nodeJS和npm, 項目是直接下載的zip包。 報錯步驟為1:cd /d 目錄; 2. npm ren dev -------> 報錯如下:

Vue項目碰到"‘webpack-dev-server’不是內部或外部命令,也不是可運行的程序或批處理文件"報錯

node fill sta 新建 sso 用戶權限 環境 fonts IT 最近公司裏做vue項目,svn了前端同事的項目代碼,裝好環境,運行項目(安裝步驟隨便百度一下,很詳細),控制臺裏報錯“‘webpack-dev-server’不是內部或外部命令,也不是可運行的程序或

webpack-dev-server 小記 原理介紹 概念解讀

style 事情 可能 asc 監聽文件 地址 dev ces 內容 使用 DevServer 提供 HTTP 服務而不是使用本地文件預覽 監聽文件的變化並自動刷新網頁,做到實時預覽 支持 Source Map,以方便調試   對於這些,Webpack 都為我們考慮好了。W

webpackwebpack-dev-server的使用

config bubuko ima 百度一 進入 自動打開 pda 監聽 電腦 本文的目的是要體驗下使用webpack服務器的熱更新和構建完成自動彈出瀏覽器的酷炫效果。 1、webpack及webpack-dev-server的安裝 全局安裝webpack,使用命令npm

關於webpack-dev-server不能及時更新的問題

tput output style 關於 腳本 class 不能 更新 瀏覽器 問題描述: 配置好了webpack-dev-server之後,修改文件,發現它可以重新編譯,但是瀏覽器頁面並沒有自動更新。 比如我在腳本裏新添了一句alert(1234), 雖然webpack-

vue中"‘webpack-dev-server’不是內部或外部命令,也不是可運行的程序"的報錯

ext watermark 描述 https 文件 程序 pac 解決辦法 ins 在vue項目中發現了這個報錯 解決辦法將項目裏的“node_modules”文件夾刪除,然後重新運行cnpm installvue中"‘webpack-d

webpack4 系列教程(十五):開發模式與webpack-dev-server

作者按:因為教程所示圖片使用的是 github 倉庫圖片,網速過慢的朋友請移步《webpack4 系列教程(十五):開發模式與 webpack-dev-server》原文地址。更歡迎來我的小站看更多原創內容:godbmw.com,進行“姿勢”交流 ♪(^∇^*) 0. 課程介紹和資料 &g

webpack 4.x 解決 webpack-dev-server工具在webpack構建的專案中使用問題

首先將webpack-dev-server安裝到專案中 npm install webpack-dev-server -D 這時在powershell中敲 webpack-dev-server 會發現 'webpack-dev-server' 不是內部或外部命令,也不是可執行的程式 或批

webpack 4.x 解決 webpack-dev-server工具在webpack構建的項目中使用問題

運行 shel pts class col png 技術 style 發現 首先將webpack-dev-server安裝到項目中 npm install webpack-dev-server -D 這時在powershell中敲 webpack-dev-server

webpack-dev-server.js:405 throw e;

一開始裝webpack建議先裝低一點版本,所以npm i -D [email protected] 裝了個3.12版本的,然後裝了webpack-dev-server 配置如下: { "name": "WebPack", "version": "1.0.0", "descr

webpack-dev-server實現專案熱部署

文章目錄 webpack-dev-server webpack-dev-server作用 新增webpack-dev-server 修改原始碼 執行結果 webpack-dev-server webp

webpack-dev-server啟動後,localhost:8080返回index.html的原理

webpack-dev-server是一個採用Node.js Express實現的微型伺服器, 內部使用webpack-dev-middleware來響應傳送到伺服器監聽單口的HTTP請求。 webpack-dev-server主要用於前端專案的本地開發和除錯。 具體使用,只需要在package.json