webpack-dev-middleware

概念


webpack-dev-middleware 是一個容器(wrapper), 它可以把 webpack 處理后的文件傳遞給一個服務(wù)器(server). webpack-dev-server 在內(nèi)部使用了它, 同時, 它也可以作為一個單獨的包來使用, 以便進(jìn)行更多自定義設(shè)置來實現(xiàn)更多的需求.

特點


  • 它將打包后的文件直接寫入內(nèi)存.
  • 每次請求都將獲得最新的打包結(jié)果.
  • 在監(jiān)視模式(watch mode)下如果代碼變化婿禽,middleware 會馬上停止提供舊版的 bundle 并且會延遲請求直到編譯完成.

webpack-dev-server(使用webpack-dev-middleware)


The webpack-dev-server is a little node.js Express server, which uses the webpack-dev-middleware to serve a webpack bundle.

實例


  • webpack.config.js
const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');


//定義了一些文件夾的路徑
const ROOT_PATH = path.resolve(__dirname);
const APP_PATH = path.resolve(ROOT_PATH, 'app');
const BUILD_PATH = path.resolve(ROOT_PATH, 'build');

module.exports = {
    //項目的文件夾 可以直接用文件夾名稱 默認(rèn)會找index.js 也可以確定是哪個文件名字
    entry: APP_PATH,
    //輸出的文件名 合并以后的js會命名為bundle.js
    output: {
        path: BUILD_PATH,
        filename: 'bundle.js',//將app文件夾中的兩個js文件合并成build目錄下的bundle.js文件
  +     publicPath: '/' //publicPath 也會在服務(wù)器腳本用到付燥,以確保文件資源能夠在 http://localhost:3000 下正確訪問
    },
    module: {
        rules: [
          { 
            test: /\.css$/, 
            use: ['style-loader','css-loader']
          },
        ]
    },
    //添加我們的插件 會自動生成一個html文件
    plugins: [
        new HtmlwebpackPlugin({
            title: 'Hello World app'
        }),//在build目錄下自動生成index.html稻薇,指定其title
    ],

};
  • server.js
const path = require("path")
const express = require("express")
const webpack = require("webpack")


const webpackDevMiddleware = require("webpack-dev-middleware")
const webpackConfig = require('./webpack.config.js')

const app = express(),
            DIST_DIR = path.join(__dirname, "dist"),// 設(shè)置靜態(tài)訪問文件路徑
            PORT = 9090, // 設(shè)置啟動端口
            complier = webpack(webpackConfig) 

app.use(webpackDevMiddleware(complier, {
    // 這里是對 webpackDevMiddleware 的一些配置,具體其他配置我們下面已經(jīng)列出來了瑰排。

    //綁定中間件的公共路徑,與webpack配置的路徑相同
    publicPath: webpackConfig.output.publicPath,
    quiet: true  //向控制臺顯示任何內(nèi)容 
}))


// 這個方法和下邊注釋的方法作用一樣,就是設(shè)置訪問靜態(tài)文件的路徑
app.use(express.static(DIST_DIR)) 


// app.get("*", (req, res, next) =>{
//     const filename = path.join(DIST_DIR, 'index.html');

//     complier.outputFileSystem.readFile(filename, (err, result) =>{
//         if(err){
//             return(next(err))
//         }
//         res.set('content-type', 'text/html')
//         res.send(result)
//         res.end()
//     })
// })

app.listen(PORT,function(){
    console.log("成功啟動:localhost:"+ PORT)
})

Path和PublicPath


publicPath

  1. 不設(shè)值, 那么資源文件會從相對的根目錄加載, 是html文件的同級, 網(wǎng)頁的話則是/
  2. 通過file://打開網(wǎng)頁, 是通過絕對根目錄/往下尋找路徑
  3. 通過http(s)://打開網(wǎng)頁, 是通過網(wǎng)頁的/往下尋找路徑
  4. 值是http(s)://這樣的URL路徑, 會直接去該路徑下加載文件
    (主要用作模擬CDN訪問資源)
  5. webpack-dev-middleware 配置項里的 publicPath 要與 webpack.config 里的 output.publicPath 保持一致(并且只能是相對路徑),不然會出現(xiàn)問題料仗;
  6. 使用 webpack-dev-middleware 的時候,其實可以完全無視 webpack.config 里的 output.path伏蚊,甚至不寫也可以立轧,因為走的純內(nèi)存,output.publicPath 才是實際的 controller躏吊;
  7. publicPath 配置的相對路徑氛改,實際是相對于 html 文件的訪問路徑。

path

就是webpack打包的指定物理存儲地址, bundle.js的存放位置.

官方文檔


webpack-dev-middleware

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末比伏,一起剝皮案震驚了整個濱河市胜卤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赁项,老刑警劉巖瑰艘,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肤舞,居然都是意外死亡紫新,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門李剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芒率,“玉大人,你說我怎么就攤上這事篙顺∨忌郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵德玫,是天一觀的道長匪蟀。 經(jīng)常有香客問我,道長宰僧,這世上最難降的妖魔是什么材彪? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮琴儿,結(jié)果婚禮上段化,老公的妹妹穿的比我還像新娘。我一直安慰自己造成,他們只是感情好显熏,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晒屎,像睡著了一般喘蟆。 火紅的嫁衣襯著肌膚如雪缓升。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天蕴轨,我揣著相機(jī)與錄音港谊,去河邊找鬼。 笑死尺棋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绵跷。 我是一名探鬼主播膘螟,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碾局!你這毒婦竟也來了荆残?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤净当,失蹤者是張志新(化名)和其女友劉穎内斯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像啼,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡俘闯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忽冻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片真朗。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧诚,靈堂內(nèi)的尸體忽然破棺而出遮婶,到底是詐尸還是另有隱情,我是刑警寧澤湖笨,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布旗扑,位于F島的核電站,受9級特大地震影響慈省,放射性物質(zhì)發(fā)生泄漏臀防。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一边败、第九天 我趴在偏房一處隱蔽的房頂上張望清钥。 院中可真熱鬧,春花似錦放闺、人聲如沸祟昭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篡悟。三九已至谜叹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搬葬,已是汗流浹背荷腊。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留急凰,地道東北人女仰。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像抡锈,于是被迫代替她去往敵國和親疾忍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容