首頁 >web前端 >js教程 >詳解webpack-dev-server的簡單使用_javascript技巧

詳解webpack-dev-server的簡單使用_javascript技巧

不言
不言原創
2018-04-03 09:36:421151瀏覽

這篇文章主要介紹了詳解webpack-dev-server的簡單使用,現在分享給大家,也要為大家做個參考。一起跟隨小編過來看看吧

webpack-dev-server

#webpack-dev-server是一個小型的Node.js Express伺服器,它使用webpack-dev-middleware來服務於webpack的套件,除此自外,它還有一個透過Sock.js來連接到伺服器的微型運行時.

我們來看一下下面的設定檔( webpack.config.js)

var path = require("path");
module.exports = {
 entry:{
 app:["./app/main.js"]
 },
 output:{
 path:path.resolve(__dirname,"build"),
 publicPath:"/assets/",
 filename:"bundle.js"
}
}

這裡你將你的來源檔案放在app資料夾下,並透過webpack將其打包到build資料夾下的bundle.js中.

注意:webpack-dev-server是一個獨立的NPM套件,你可以透過npm install webpack-dev-server來安裝它.

#基本目錄

webpack-dev-server預設會以目前目錄為基本目錄,除非你制定它.

webpack-dev-server --content-base build/

上述命令是在命令列中執行的,它將build目錄作為根目錄.有一點需要注意的是:webpack-dev-server生成的包並沒有放在你的真實目錄中,而是放在了內存中.

我們在基本目錄下新建一個index.html檔,然後在瀏覽器中輸入http://localhost:8080訪問.

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script src="assets/bundle.js"></script>
</body>
</html>

#自動刷新

webpack-dev-server支援兩種模式來自動刷新頁面.

  1. iframe模式(頁面放在iframe中,當發生改變時重載)

  2. inline模式(將webpack-dev-sever的客戶端入口新增至套件(bundle))

#兩種模式都支援熱模組替換(Hot Module Replacement).熱模組替換的好處是只替換更新的部分,而不是頁面重載.

iframe模式
使用這種模式不需要額外的配置,只需要以下面這種URL格式訪問即可

http://«host»:«port»/webpack-dev-server/«path»

例如:http://localhost:8080/webpack-dev-server/index.html.

inline模式

inline模式下我們造訪的URL不用發生變化,啟用這種模式分兩種情況:

1 當以命令列啟動webpack-dev-server時,需要做兩點:

  1. 在命令列中加入--inline指令

  2. 在webpack.config.js中加入devServer:{inline:true}

2 當以Node.js API啟動webpack-dev-server時,我們也需要做兩點:

  1. 由於webpack-dev-server的設定中無inline選項,我們需要加入webpack-dev-server/client?http://«path»:«port»/到webpack配置的entry入口點中.

  2. 將d141004d810ae36912d7298eeb68b32d2cacc6d41bbb37262a98f745aa00fbf0加入html檔案

 var config = require("./webpack.config.js");
 var webpack = require(&#39;webpack&#39;);
 var WebpackDevServer = require(&#39;webpack-dev-server&#39;);

config.entry.app.unshift("webpack-dev-server/client?http://localhost:8080/");

var compiler = webpack(config);
var server = new WebpackDevServer(compiler, {
 contentBase:&#39;build/&#39;,
 publicPath: "/assets/"
});
server.listen(8080);

在Node中運行上面的程式碼即可。

注意:webpack配置中的devSever配置項目只對在命令列模式有效。

(Hot Module Replacement)熱模組替換

#在命令列中執行inline模式,並啟用熱模組取代

這裡只要要多增加--hot指令就OK了.如下所示.

webpack-dev-server --content-base build --inline --hot

#注意:命令列模式下,webpack.config.js中一定要配置output.publicPath來指定編譯後的套件(bundle)的存取位置.

在Nodejs API中運行inline模式,並啟用熱模組替換

這裡需要做以下三點:

  1. 在webpack.config.js的entry選項中加入:webpack/hot/dev-server

  2. 在webpack. config.js的plugins選項中新增:new webpack.HotModuleReplacementPlugin()

  3. 在webpack-dev-server的設定中新增:hot:true

webpack-dev-server中的設定選項

var WebpackDevServer = require("webpack-dev-server");
var webpack = require("webpack");

var compiler = webpack({
 // configuration
});
var server = new WebpackDevServer(compiler, {
 // webpack-dev-server options

 contentBase: "/path/to/directory",
 // Can also be an array, or: contentBase: "http://localhost/",

 hot: true,
 // Enable special support for Hot Module Replacement
 // Page is no longer updated, but a "webpackHotUpdate" message is send to the content
 // Use "webpack/hot/dev-server" as additional module in your entry point
 // Note: this does _not_ add the `HotModuleReplacementPlugin` like the CLI option does. 

 // Set this as true if you want to access dev server from arbitrary url.
 // This is handy if you are using a html5 router.
 historyApiFallback: false,

 // Set this if you want to enable gzip compression for assets
 compress: true,

 // Set this if you want webpack-dev-server to delegate a single path to an arbitrary server.
 // Use "**" to proxy all paths to the specified server.
 // This is useful if you want to get rid of &#39;http://localhost:8080/&#39; in script[src],
 // and has many other use cases (see https://github.com/webpack/webpack-dev-server/pull/127 ).
 proxy: {
 "**": "http://localhost:9090"
 },

 setup: function(app) {
 // Here you can access the Express app object and add your own custom middleware to it.
 // For example, to define custom handlers for some paths:
 // app.get(&#39;/some/path&#39;, function(req, res) {
 // res.json({ custom: &#39;response&#39; });
 // });
 },

 // pass [static options](http://expressjs.com/en/4x/api.html#express.static) to inner express server
 staticOptions: {
 },

 // webpack-dev-middleware options
 quiet: false,
 noInfo: false,
 lazy: true,
 filename: "bundle.js",
 watchOptions: {
 aggregateTimeout: 300,
 poll: 1000
 },
 // It&#39;s a required option.
 publicPath: "/assets/",
 headers: { "X-Custom-Header": "yes" },
 stats: { colors: true }
});
server.listen(8080, "localhost", function() {});
// server.close();

參考:http://webpack.github.io/docs/webpack- dev-server.html

相關推薦:

webpack-dev-server怎麼設定遠端模式

webpack-dev-server使用http-proxy解決跨域問題詳解

###################################################

以上是詳解webpack-dev-server的簡單使用_javascript技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn