在開發網頁時都需要使用 web Server 來用用於開發環境中,早期開發多是使用 xampp 這類的 local server 開發,目前以前端來使用是透過 VSCode 使用 liveServer 開啟本地端的 server 來開啟頁面,這樣的方式都會比較麻煩,在開發網站時會透過多套的軟體或是插件才能進行開發。
以 webpack 開發方式,可以啟用本地端 server,與支援 log 輸出與其他相關應用。
什麼是 webpack-dev-server
webpack-dev-server 可以啟動 server 環境,透過 localhost 開啟開發中的網頁。
webpack-dev-server 安裝與設定
webpack-dev-server 安裝
webpack-dev-server 並沒有包在一開始下載的 webpack 核心套件中,是以一個獨立的功能來選擇可裝或不裝,安裝輸入下面指令。
1 | npm install webpack-dev-server --save-dev |
webpack-dev-server 的設定
前往 webpack.config.js 檔中的 module.exports = {} 下加入下面程式碼,可放置在 output: {}, 的後方插入 webpack-dev-server 設定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | devServer: { compress: true, port: 3000, stats: { assets: true, cached: false, chunkModules: false, chunkOrigins: false, chunks: false, colors: true, hash: false, modules: false, reasons: false, source: false, version: false, warnings: false, }, }, |
設定參數說明如下:
- compress: true, 使用 webpack-dev-server 啟動專案時,處理相關的內容如連結與下載時,會以壓縮格式處理,會讓 webpack-dev-server 啟動時變的較快速。
- port: 3000, 指定 localhost 連線的埠號,預設是 3000 可自定。
devServer 設定中的 stats 細節比較多,如果上面常用設定不夠,可以在加入下方的細項設定,對應如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | stats: { assets: true, // 加入資源訊息 builtAt: true, // 加入建構日期和建構時間 cached: true, // 加入暫存(但未建構)模塊的信息 cachedAssets: true, // 顯示暫存的資源(設置為 `false` 則僅顯示輸出的文件) children: true, // 加入 children 訊息 chunks: true, // 加入 chunk 訊息(設置為 `false` 能允許較少的冗长輸出) chunkModules: true, // 將建構模塊信息加入到 chunk 信息 colors: true, // 等同 `webpack --colors` entrypoints: false, // 通過對應的 bundle 顯示入口起點 errors: true, // 加入錯誤訊息 hash: true, // 加入 compilation 的hash maxModules: 15, // 設置要顯示的模塊的最大數量 modules: true, // 加入建構模塊訊息 moduleTrace: true, // 顯示警告/錯誤的依賴和來源(webpack 2.5.0 開始) performance: true, // 當文件大小超过 `performance.maxAssetSize` 顯示性能提示 providedExports: false, // 顯示模塊的輸出 publicPath: true, // 加入 public path 的訊息 reasons: true, // 加入模塊被引入的原因 source: false, // 加入模塊的源码 usedExports: false, // 顯示哪个模塊導出被用到 version: true, // 加入 webpack 版本信息 warnings: true, // 加入警告 } |
設定 package.json 的 npm 指令
在 package.json 檔中的 "scripts": {} 中再加入一行 npm 的 'dev' 指令,指令如下。
設定錯誤 npm 指令參數 –mode development (–mode 寫於 webpack 檔與設定的前面)
錯誤寫法如下。
1 | "dev": "cross-env NODE_ENV=development --mode development webpack-dev-server" |
設定好 npm 指令 'dev',使用 npm run dev 執行 webpack 執行編譯,此時會產生錯誤提示。
查看上面一點的錯誤訊息。
在 webpack 執行的過程中,會先去讀取 webpack.config.js 檔,而 npm 指令的讀取順預是先由前到後面,先把 --mode development 放置在前面而 webpack-dev-server 在後面,會造成沒有先讀取到 webpack.config.js 檔的內容,而在 npm 指令中的 --mode development 就會回應出錯誤訊息。
正確設定 npm 指令參數 –mode development (–mode 寫於 webpack 檔與設定的後面)
修改後如下,將 --mode development 放置於 webpack-dev-server 的後方。
1 | "dev": "cross-env NODE_ENV=development webpack-dev-server --mode development" |
npm 自定指令的讀取順序, webpack 與 webpack-dev-server 都需要注意 webpack.config.js 檔的載入順序,確定戴入套件後再將模式參數 --mode development 傳入 npm 使用。
直接將 NODE_ENV 設定在 webpack.config.js 檔中也是可行,就可不用注意 npm 自定指令戴入套件與參數前後順序的問題。
webpack-dev-server 啟動時的注意事項
webpack-dev-server 預處理於記憶體不會產生 dist 資料夾
修正問題後,再輸入 npm run dev 指令,基本上就會成功開啟 wewbpack-dev-server 的 local server,相關的 log 訊息與編譯內容都在出現在終端機上。
wewbpack-dev-server 啟動成 local server 時,並不會執行 webpack 編譯動作而產生 dist 相關資料夾與檔案,主要只針對 src 資料夾中的檔案與內容,以預處理的方式執行至電電記憶體中,這樣的方式並不會產生 dist 資料夾是直接取用記憶體。
執行 webpack-dev-server 時會在終端機上產生 local server 網址
執行 webpack-dev-server 時會在終端機上產生 local server 網址與埠號,而埠號設定於 webpack.config.js 檔中的 devServer: { port: 3000, }。
開啟 local server 網址瀏覽器頁面,修改 src 資料夾下相關檔案會同時更新畫面
在 VSCode 中配合 cmd 鍵點按,而瀏覽器會開啟 local server 的頁面,當修改 src 內的相關檔案存檔後,webpack-dev-server 就會觸發同時更新瀏覽器頁面,重新讀取頁面同時將畫面內容更新。
使用 npm 自定指令加入參數 –open,開啟 webpack-dev-server 時自動開啟預設瀏覽器
將 npm 指令修改如下,後方多加入 --open 參數
1 | "dev": "cross-env NODE_ENV=development webpack-dev-server --mode development --open" |
終端機在輸入指令 npm rnu dev 後,就會動自開啟預設瀏覽器的 local server 的頁面,這樣自動開啟方式就不用再透過點按終端機所產生的網址與埠號,在開啟專案時較方便只要輸入指令就可開啟專用的頁面。
npm 指令後透過 --open 開啟的瀏覽器為預設瀏覽器,如果要直接針對特定使用的瀏覽器像是 'google chrome' 或是 'Firefox Developer Edition' 直接使用字串名稱於 --open 後方,啟動後就會在指定的瀏覽器上開始頁面。