鍍金池/ 問(wèn)答/HTML/ webpack 熱更新配置 問(wèn)題

webpack 熱更新配置 問(wèn)題

配置webpack熱更新,服務(wù)端已啟動(dòng),改變代碼不能熱更新

webpack.config.js配置

const fs = require('fs')
const path = require('path')
const webpack = require('webpack')
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
    // webpack 打包的一種模式
    devtool: 'inline-source-map',
    // fs.readdirSync(__dirname) === 得到一個(gè)當(dāng)前文件目錄下的所有文件名稱(chēng) 的數(shù)組對(duì)象。
    // dirname === 當(dāng)前模塊的文件夾名稱(chēng)
    entry: fs.readdirSync(__dirname).reduce((entries, dir) => {
        // entries ===》
        // 當(dāng)前的 要處理的這個(gè)文件目錄
        const fullDir = path.join(__dirname, dir)
        // 入口文件
        const entry = path.join(fullDir, 'index.js')
        // fs.statSync(fullDir).isDirectory() ===> 檢測(cè)是否存在當(dāng)前這個(gè)目錄
        // fs.existsSync(entry) ===> 檢測(cè)是否存在當(dāng)前要處理的這個(gè)文件
        if (fs.statSync(fullDir).isDirectory() && fs.existsSync(entry)) {
            entries[dir] = ['webpack-hot-middleware/client', entry]
            // entries[dir] = entry
        }
        
        return entries
    }, {}),

    // 出口文件
    output: {
        path: path.join(__dirname, 'dist'),
        // 文件的名稱(chēng)
        filename: '[name].js',
        // 服務(wù)端 靜態(tài)資源路徑
        publicPath: '/dist/'
    },

    // 處理不同文件類(lèi)型的模塊
    module: {
        rules: [
            {
                test: /\.js$/,
                use: [
                    'babel-loader'
                ]
            },
            {
                test: /\.(css|less)$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'less-loader'
                ]
            }
        ]
    },
    // 插件,用于增強(qiáng) webpack 的額外功能
    plugins: [
        // 用于將公共的 類(lèi)庫(kù) 提取出來(lái)
        new webpack.optimize.CommonsChunkPlugin({
            name: 'shared',
            filename: 'shared.js'
        }),
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoEmitOnErrorsPlugin(),
        new UglifyJSPlugin({
            sourceMap: true
        })
    ],
}

server.js

const express = require('express')
const webpack = require('webpack')
const webpackDevMiddleware = require('webpack-dev-middleware')
const webpackHotMiddleware = require('webpack-hot-middleware')
const WebpackConfig = require('./webpack.config')

const app = express()
const compiler = webpack(WebpackConfig)

app.use(webpackDevMiddleware(compiler, {
    publicPath: WebpackConfig.output.publicPath
}))

app.use(webpackHotMiddleware(compiler))

app.use(express.static(__dirname))

const port = process.env.PORT || 8085
module.exports = app.listen(port, () => {
    console.log(`http://localhost:${port}`)
})

瀏覽器提示信息
圖片描述

大佬們指點(diǎn)下,跪謝!

回答
編輯回答
胭脂淚

根據(jù)報(bào)錯(cuò)提示說(shuō)檢測(cè)到更新需要刷新但是刷新不了,所以 webpackdevserver 是配好了但是瀏覽器刷新不了是因?yàn)?webpackDev 沒(méi)跟瀏覽器建立 socket 通信,所有 entry 后面要加上端口號(hào),因?yàn)榭赡苁悄愀牧朔?wù)的默認(rèn)端口號(hào),所有 socket.js 沒(méi)加載進(jìn)客戶端來(lái)

entries[dir] = ['webpack-hot-middleware/client', entry]
// 增加你本地 webpackDevServer 的端口號(hào)例如 8080
entries[dir] = ['webpack-hot-middleware/client?0.0.0.0:8080', entry]
2017年4月18日 10:17
編輯回答
負(fù)我心

樓主需要在入口中添加'webpack-hot-middleware/client?path=/__what&timeout=2000&overlay=false',并且插件中得添加 new webpack.HotModuleReplacementPlugin(),具體的可以看下我寫(xiě)的搭建服務(wù)器教程,不過(guò)我是用koa,不過(guò)寫(xiě)法類(lèi)似

2018年8月29日 18:21