webpack demo
摘要:在項目根目錄下創建,通過這個文件來起服務。到這里為止,自動刷新的內容基本講完了。注意到一點,目前自動刷新都是刷新整個頁面。其中表示熱加載模塊,表示。后續我還會進行更深入的學習,希望和大家共同進步。
本文主要介紹以下兩方面的內容:
webpack-dev-server自動刷新
熱加載(Hot Module Replacement)
自動刷新webpack-dev-server提供了兩種自動刷新的模式
iframe模式
inline模式
這兩種模式都支持Hot Module Replacement(熱加載),所謂熱加載是指當文件發生變化后,內存中的bundle文件會收到通知,同時更新頁面中變化的部分,而非重新加載整個頁面。
我們先介紹自動刷新,再來談熱加載。
iframe模式前兩篇文章中提到,我們在控制臺輸入
$ webpack-dev-server
就啟動了服務,并且支持自動刷新,其實,這種方式就是iframe模式。查看頁面元素可以發現:
如圖中黑框所示,可以看到其實是通過iframe內使我們實際的頁面。
這種方式有一點需要注意:瀏覽器地址欄的url地址不會受頁面跳轉的影響,將一直保持為http://localhost:8080/webpack-dev-server。
比如,現在給index.html頁面加上一個跳轉鏈接,跳轉到foo.html。
foo.html
webpack demo this is another page
index.html中加入跳轉鏈接如下:
click here to go to foo.htmlwebpack demo
當點擊鏈接跳轉到foo.html頁面時,可以看到瀏覽器的地址欄中仍然是http://localhost:8080/webpack-dev-server。如下:
inline模式這里要說一下,目前我們啟動webpack-dev-server都是通過命令行實現的。實際上,還可以通過nodeAPI WebpackDevServer實現。
先看命令行如何實現inline模式,有兩種方法:
1、啟動時配置
$ webpack-dev-server --inline
2、配置文件配置,在webpack.config.js中加入
devServer: { inline: true }
這樣我們就可以通過http://localhost:8080/
接下來說明如何使用WebpackDevServer來實現inline模式。
在項目根目錄下創建server.js,通過這個文件來起服務。
server.js
var webpack = require("webpack"); var WebpackDevServer = require("webpack-dev-server"); var config = require("./webpack.config.js"); config.entry.unshift("webpack-dev-server/client?http://localhost:8080/"); var compiler = webpack(config); var server = new WebpackDevServer(compiler, { publicPath: "/dist/" }); server.listen(8080);
有幾個問題需要說明:
1、這里加載了webpack和webpack-dev-server兩個模塊,這個require默認會從node-modules中去加載。由于我們之前安裝時為了方便在命令行下使用,采用了全局安裝的方式-g,所以本地并沒有安裝這個模塊。這里需要在當前項目中再進行安裝
$ npm install webpack webpack-dev-server
2、在配置文件webpack.config.js中無需再對devServer進行配置,因為我們這樣啟動服務的話,WebpackDevServer是訪問不到webpack中的配置的。但是,我們需要對配置文件的entry進行修改:
entry: ["./src/entry.js"]
以數組方式來寫,這樣就可以支持多個入口文件。同時在server.js中加入
config.entry.unshift("webpack-dev-server/client?http://localhost:8080/");
3、WebpackDevServer支持兩個參數,其中第二個參數對WebpackDevServer進行了配置,剛剛提到,WebpackDevServer是訪問不到webpack中的配置的,所以這里我們要再設置publicPath。
當然,為了方便處理,一般我們可以統一將WebpackDevServer的配置在webpack.config.js中的devServer中設置,再將devServer作為第二個參數傳給WebpackDevServer。如下:
webpack.config.js
module.exports = { devServer: { //這里配置webpack-dev-server publicPath: "/dist/" //這里還可以加入其它你需要的參數 }, entry: ["./src/entry.js"], output: { path: path.join( __dirname, "/dist"), publicPath: "/dist/", filename: "bundle.js" }, module: { loaders: [ //.... ] } };
server.js
var config = require("./webpack.config.js"); config.entry.unshift("webpack-dev-server/client?http://localhost:8080/"); var compiler = webpack(config); var server = new WebpackDevServer(compiler, config.devServer); //這里將其作為參數傳進來
最后運行server.js就可以啟動服務了。
$ node server.js
到這里為止,自動刷新的內容基本講完了。注意到一點,目前自動刷新都是刷新整個頁面。下面來說下熱加載,也就是只有變化的內容更新,而非刷新整個頁面。
Hot Module Replacement(熱加載)方法一:直接通過命令行設置
$ webpack-dev-server --hot
打開頁面可以在控制臺看到以上內容,說明熱加載配置成功。其中HMS表示熱加載模塊,WDS表示webpack-dev-server。
方法二:通過nodejs的api配置
這個方法需要對webpack.config.js做出一些配置。
第一步:在webpack配置文件入口參數中加入webpack/hot/dev-server
在server.js中作如下修改即可:
config.entry.unshift("webpack-dev-server/client?http://localhost:8080/", "webpack/hot/dev-server"); //這里在入口參數中又添加了一項,為熱加載的dev-server
第二步:添加plugin,添加熱加載模塊
plugins: [ new webpack.HotModuleReplacementPlugin() ]
第三步:在devServer中配置hot為true
devServer: { publicPath: "/dist/", hot: true //這里配置了熱加載模式為true //這里還可以加入其它你需要的參數 }
最終,webpack.config.js如下:
let path = require("path"); let webpack = require("webpack"); module.exports = { devServer: { publicPath: "/dist/", hot: true //這里還可以加入其它你需要的參數 }, entry: ["./src/entry.js"], output: { path: path.join( __dirname, "/dist"), publicPath: "/dist/", filename: "bundle.js" }, module: { loaders: [ { test: /.css$/, loader: "style!css" }, { test: /.less$/, loader: "style!css!less" }, { test: /.js$/, exclude: /node_modules/, loader: "babel-loader" } ] }, plugins: [ new webpack.HotModuleReplacementPlugin() ] };
server.js如下:
var webpack = require("webpack"); var WebpackDevServer = require("webpack-dev-server"); var config = require("./webpack.config.js"); config.entry.unshift("webpack-dev-server/client?http://localhost:8080/", "webpack/hot/dev-server"); var compiler = webpack(config); var server = new WebpackDevServer(compiler, config.devServer); server.listen(8080);
啟動服務:
$ node server.js
可以看到配置成功,如下圖所示:
至此,本文對webpack-dev-server的自動刷新和熱加載做了詳細介紹,當然,它的原理還有待更深一步的探索。后續我還會進行更深入的學習,希望和大家共同進步。
參考資料http://webpack.github.io/docs...
(本文完)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80775.html
摘要:上一章我們了解了的編譯環境搭建項目構建二編譯環境搭建這一章我們會結合的,介紹本地測試服務器的搭建過程。三開發環境有一些特性是專門用于開發環境的,可以幫助我們搭建一個更好的開發環境。我們可以通過配合使用來搭建本地服務。 注:以下教程均在 windows 環境實現,使用其他操作系統的同學實踐過程可能會有些出入。 ??上一章我們了解了 webpack 的 ES6 編譯環境搭建:webpack...
摘要:是一個和差不多同時代的產物,但是它只支持基于,對于來說只能興嘆了。找一個自己順手的就好,順便一提,我現在主要使用輔助。 說到自動化構建,你想到了什么?基于AMD的requirejs?還是基于commoJS的browserify?他們都在各自的領域或者說時代發揮了很重要的作用。但是時代的變遷,webpack成了現在的佼佼者,我們不知道什么時候wepback也會被取代,但是現在我們必須要掌...
摘要:介紹簡單點來說就就是一個配置文件,所有的魔力都是在這一個文件中發生的。一安裝全局安裝在文件夾里面也需要安裝這個是在你根目錄下進行的全局安裝記得加太慢,推薦用的鏡像安裝方法一樣。二創建項目新建文件夾命令行輸入命令。 介紹:webpack簡單點來說就就是一個配置文件,所有的魔力都是在這一個文件中發生的。 這個配置文件主要分為三大塊 entry 入口文件 讓webpack用哪個文件作為項目的...
摘要:同時它還提供了自動刷新熱更新等功能,使開發變得非常方便。的到來減少了很多的配置,它內置了很多的功能。 上一篇文章里詳細介紹了一下插件的用法,這一篇文章接著豐富module.exports里的屬性。如今的前端發展已經非常迅速了,伴隨而來的是開發模式的轉變。現在已經不再是寫個靜態頁面并放在瀏覽器里打開預覽一下了。在實際的開發中會經常需要使用http服務器,比如之前的ajax,想要看到效果就...
摘要:上篇文章中簡單介紹了的最基本用法,且項目結構十分簡單,只有一個頁面一個頁面兩個文件。本文將介紹如何使用對具有較為規范的結構的項目進行構建。這說明監測到了文件的變化,但是我們的加載的文件并沒有變。后續還會更深入地學習,希望和大家一同進步。 上篇文章中簡單介紹了webpack的最基本用法,且項目結構十分簡單,只有一個html頁面、一個css頁面、兩個js文件。本文將介紹如何使用webpac...
閱讀 1010·2021-11-22 13:52
閱讀 924·2019-08-30 15:44
閱讀 570·2019-08-30 15:43
閱讀 2424·2019-08-30 12:52
閱讀 3473·2019-08-29 16:16
閱讀 637·2019-08-29 13:05
閱讀 2943·2019-08-26 18:36
閱讀 1975·2019-08-26 13:46