鍍金池/ 問答/HTML/ koa服務端熱更新問題

koa服務端熱更新問題

問題
webpack的入口文件./build/test/src/entry/index
引入css文件 修改后熱更新正常
但是只要修改的是js代碼, webpack就會不斷的打包,最后才更新到瀏覽器,過程將近10s,

網(wǎng)上的很多例子都是express
服務端用的是koa
熱更新插件是koa-webpack-dev-middleware,koa-webpack-hot-middleware

webpack的配置

const webpack = require('webpack');
const path = require('path');
var publicPath = 'http://192.168.1.100:1919/dist/';
var hotMiddlewareScript = 'webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000&reload=true';
module.exports = {
    entry: {
        index: [
            hotMiddlewareScript, 
            './build/test/src/entry/index'
        ]
    },
    output:{
        filename: 'bundle.[name].js',
        path: path.resolve(__dirname, "./build/test/src"),
        publicPath: publicPath
    },
    module: {
        loaders: [
            {
                test: /.css$/,
                loader: 'style-loader!css-loader'
            },
            {
                test: /\.js$/,
                loader: 'babel-loader',
                query: {
                    'presets': ['es2015', 'stage-0']
                }
            }
        ]
    },
    plugins: [
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoEmitOnErrorsPlugin()
    ]
}

項目目錄
圖片描述

app.js 服務端

const webpack = require('webpack');
const webpackDevMiddleware = require('koa-webpack-dev-middleware');
const webpackHotMiddleware = require('koa-webpack-hot-middleware');
const config = require('./webpack.config');
const koa =  require('koa');
const app = new koa();
const convert = require('koa-convert');
const router = require('./server/router/router');
const koaStatic = require('koa-static');
const views = require('co-views');
const compiler = webpack(config);
app.use(webpackDevMiddleware(compiler, {
    noInfo: true,
    watchOptions: {
        ignored: /node_modules/,
    },
    reload: true,
    publicPath: config.output.publicPath,
    stats: {
        colors: true
    }
}))
app.use(webpackHotMiddleware(compiler))
app.use(async function(ctx,next) {
    ctx.render = views(__dirname + '/server', {
        ext: 'ejs',
    });
    await next();
})
    .use(koaStatic(__dirname + '/release'))
    .use(router.routes())
    .use(router.allowedMethods())
app.listen(1919)

圖片描述

package.json

{
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "co-views": "^2.1.0",
    "css-loader": "^0.28.8",
    "ejs": "^2.5.7",
    "eventsource-polyfill": "^0.9.6",
    "express-to-koa": "^1.0.6",
    "koa": "^2.4.1",
    "koa-convert": "^1.2.0",
    "koa-router": "^7.3.0",
    "koa-static": "^4.0.2",
    "koa-webpack-dev-middleware": "^2.0.2",
    "koa-webpack-hot-middleware": "^1.0.3",
    "koa-webpack-middleware": "^1.0.7",
    "style-loader": "^0.19.1",
    "webpack": "^3.3.0",
    "webpack-dev-middleware": "^1.12.0",
    "webpack-hot-middleware": "^2.18.2"
  },
  "dependencies": {
    "koa": "^2.0.0-alpha.8"
  }
}
回答
編輯回答
薄荷綠

自寫的一篇基于koa+webpack簡易教程,可以去看下,覺的有用的話,別忘了留個Star哦~

2018年8月17日 10:45