使用webpack3.0配置webpack-dev-server教程
最近正在研究webpack,聽(tīng)說(shuō)webpack可以自己搭建一個(gè)小型的服務(wù)器(使用過(guò)vue-cli的朋友應(yīng)該都見(jiàn)識(shí)到過(guò)),所以迫不及待的想要嘗試一下。不過(guò),在實(shí)際操作中發(fā)現(xiàn),用webpack搭建服務(wù)器仍有不少坑,一方面是由于自己對(duì)文檔的不熟悉,不了解webpack-dev-server的運(yùn)作模式;另一方面,在翻閱了不少博客和文章后,發(fā)現(xiàn)不少配置實(shí)際上都跑不起來(lái)(有可能是版本的原因,也有可能是我自己配置的原因)。所以我打算用webpack3.0把dev-server跑起來(lái)給大家演示一遍,順便把一些配置和原理給大家講清楚,這樣就省的繞彎路了。
這里我就默認(rèn)大家都已經(jīng)安裝了webpack以及自己需要使用的loader和plugins,由于webpack-dev-server是個(gè)獨(dú)立的npm包,所以我們需要在npm下安裝它:
npm install webpack-dev-server --save-dev
之后我們就可以在webpack.config.js中進(jìn)行配置:
const path = require("path"); module.exports = { entyr:{ ....... //設(shè)置入口文件 }, output:{ ....... //設(shè)置出口文件 }, module:{ ....... //配置loader,注意使用rules而不是loaders }, plugins:[ ....... //注意是數(shù)組 ], devServer:{ //我們?cè)谶@里對(duì)webpack-dev-server進(jìn)行配置 } }
devServer中常用的配置對(duì)象屬性如下:
1. contentBase:"./" // 本地服務(wù)器在哪個(gè)目錄搭建頁(yè)面,一般我們?cè)诋?dāng)前目錄即可;
2. historyApiFallback:true // 當(dāng)我們搭建spa應(yīng)用時(shí)非常有用,它使用的是HTML5 History Api,任意的跳轉(zhuǎn)或404響應(yīng)可以指向 index.html頁(yè)面;
3. inline:true // 用來(lái)支持dev-server自動(dòng)刷新的配置,webpack有兩種模式支持自動(dòng)刷新,一種是iframe模式,一種是inline模式;使用iframe模式是不需要在devServer進(jìn)行配置的,只需使用特定的URL格式訪問(wèn)即可;不過(guò)我們一般還是常用inline模式,在devServer中對(duì)inline設(shè)置為true后,當(dāng)我們啟動(dòng)webpack-dev-server時(shí)仍要需要配置inline才能生效,這一點(diǎn)我們之后再說(shuō);
4. hot:true // 啟動(dòng)webpack熱模塊替換特性,這里也是坑最多的地方,不少博客都將hot設(shè)置了true,我們姑且也設(shè)置為true,之后再看;
5. port:端口號(hào)(默認(rèn)8080) // 這就不用我多說(shuō)了吧;
事實(shí)上大概常用的配置也就這樣,為了方便,我們?cè)趐ackjson中對(duì)webpack-dev-server的的啟動(dòng)進(jìn)行一下設(shè)置:
"scripts": { ...... ...... "start":"webpack-dev-server --inline" },
別忘了在devServer中設(shè)置inline:true后這里也要設(shè)置一下!
這時(shí)我們打包后再運(yùn)行服務(wù)器后應(yīng)該發(fā)現(xiàn)index.html頁(yè)面已經(jīng)展示了,打包好后的js文件雖然出現(xiàn)在了src上,但并沒(méi)有顯示,打開(kāi)控制臺(tái)會(huì)發(fā)現(xiàn)如下報(bào)錯(cuò):
控制臺(tái)顯示:Hot Module Replacement is disabled;
奇怪?我們之前不是在devServer中設(shè)置了hot為true了嗎?事實(shí)上,雖然不知道為什么,但是目前來(lái)說(shuō)hot這個(gè)屬性已經(jīng)沒(méi)有用了,使用熱模塊的話我們需要用到一個(gè)叫webpack.HotModuleReplacementPlugin的插件。所以我們的webpack.config.js需要加上這些:
const path = require("path"); const webpack = requier ("webpack"); module.exports = { entyr:{ ....... //設(shè)置入口文件 }, output:{ ....... //設(shè)置出口文件 }, module:{ ....... //配置loader,注意使用rules而不是loaders }, plugins:[ new webpack.HotModuleReplacementPlugin() ....... //注意是數(shù)組 ], devServer:{ contentBase: "./", historyApiFallback:true, inline:true, hot:true } }
這時(shí)我們?cè)僭赽ash上運(yùn)行npm run start后發(fā)現(xiàn)服務(wù)器就搭建完成了!
另外,還有一點(diǎn)值得注意的就是,webpack-dev-server所使用的bundle.js文件并不是webpack.config.js中output打包生成的bundle.js,而是使用webpack-dev-server自己打包生成的,這個(gè)文件不存在與output或其他路徑中,而是存到了內(nèi)存中,事實(shí)上webpack-dev-server所使用的那個(gè)bundle.js我們是看不到的!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- webpack-dev-server原理解析及跨域解決方法
- 'webpack-dev-server'?不是內(nèi)部或外部命令也不是可運(yùn)行的程序?或批處理文件的最新解決方法
- webpack-dev-server核心概念案例詳解
- 詳解Webpack-dev-server的proxy用法
- 淺談webpack-dev-server的配置和使用
- 使用webpack-dev-server處理跨域請(qǐng)求的方法
- 詳解webpack-dev-server 設(shè)置反向代理解決跨域問(wèn)題
- 詳解webpack-dev-server的簡(jiǎn)單使用
- webpack-dev-server自動(dòng)更新頁(yè)面方法
- webpack-dev-server 的 host 配置 0.0.0.0的方法
相關(guān)文章
如何在javascript 中使用 xmlHttpRequest 發(fā)送 POST
本文將通過(guò)不同的示例解釋如何使用JavaScript代碼在AJAX編程中發(fā)送 XMLHttpRequest post 請(qǐng)求,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-07-07Javascript簡(jiǎn)寫條件語(yǔ)句(推薦)
下面小編就為大家?guī)?lái)一篇Javascript簡(jiǎn)寫條件語(yǔ)句(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06新發(fā)現(xiàn)原來(lái)documenet.URL也可以實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
新發(fā)現(xiàn)原來(lái)documenet.URL也可以實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)...2007-08-08基于Bootstrap實(shí)現(xiàn)下拉菜單項(xiàng)和表單導(dǎo)航條(兩個(gè)菜單項(xiàng),一個(gè)下拉菜單和登錄表單導(dǎo)航條)
這篇文章主要介紹了基于Bootstrap實(shí)現(xiàn)下拉菜單項(xiàng)和表單導(dǎo)航條(兩個(gè)菜單項(xiàng),一個(gè)下拉菜單和登錄表單導(dǎo)航條)的相關(guān)資料,需要的朋友可以參考下2016-07-07ES6?關(guān)鍵字?let?和?ES5?及關(guān)鍵字?var?的區(qū)別解析
var可以穿透控制語(yǔ)句、條件語(yǔ)句這樣的作用域,導(dǎo)致變量沖突經(jīng)常發(fā)生,這篇文章主要介紹了ES6?關(guān)鍵字?let?和?ES5?及關(guān)鍵字?var?的區(qū)別,需要的朋友可以參考下2022-09-09詳解用webpack的CommonsChunkPlugin提取公共代碼的3種方式
本篇文章主要介紹了詳解用webpack的CommonsChunkPlugin提取公共代碼的3種方式,具有一定的參考價(jià)值,有興趣的可以了解一下2017-11-11基于JavaScript創(chuàng)建動(dòng)態(tài)Dom
這篇文章主要介紹了基于JavaScript創(chuàng)建動(dòng)態(tài)Dom的相關(guān)資料,需要的朋友可以參考下2015-12-12