webpack-dev-middleware 插件的使用

该文章以收录 《webpack探索之路》

前言

咱们在使用webpack 编译文件时,每次改动文件都要去从新编译,是否是很麻烦,这时候咱们就用到了webpack-dev-middleware 插件,该插件对更改的文件进行监控,编译, 通常和 webpack-hot-middleware 配合使用,实现热加载功能css

这里怎么安装我不在说,html

github地址:
https://github.com/webpack/webpack-dev-middlewarenode

练习代码地址: (webpackDevMiddleware 文件夹,下载执行命令便可)
https://github.com/webxiaoma/webpack-domeswebpack

使用方法

1、文件目录 git

目录

2、安装 github

webpack, webpack-dev-middleware, style-loader, css-loaderweb

3、文件内容 express

1.index.jsnpm

import index from '../css/index.css';


var sub = require('./sub');
var app = document.createElement('div');
app.innerHTML = '<h1>Hello World h1</h1>';
app.appen

2.sub.jsjson

function generateText() {
  var element = document.createElement('h2');
    element.id = "twoH"
  element.innerHTML = "Hello h2 world h2";
  return element;
}
module.exports = generateText;

3.index.css

#twoH{
  color:blue;
  font-size:26px;
}

4.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 = {
    //项目的文件夹 能够直接用文件夹名称 默认会找index.js 也能够肯定是哪一个文件名字
    entry: APP_PATH,
    //输出的文件名 合并之后的js会命名为bundle.js
    output: {
        path: BUILD_PATH,
        filename: 'bundle.js'//将app文件夹中的两个js文件合并成build目录下的bundle.js文件
    },
    module: {
        rules: [
          { 
            test: /\.css$/, 
            use: ['style-loader','css-loader']
          },
        ]
    },
    //添加咱们的插件 会自动生成一个html文件
    plugins: [
        new HtmlwebpackPlugin({
            title: 'Hello World app'
        }),//在build目录下自动生成index.html,指定其title
    ],

};

5.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"),// 设置静态访问文件路径
            PORT = 9090, // 设置启动端口
            complier = webpack(webpackConfig) 

app.use(webpackDevMiddleware(complier, {
    // 这里是对 webpackDevMiddleware 的一些配置,具体其余配置咱们下面已经列出来了。

    //绑定中间件的公共路径,与webpack配置的路径相同
    publicPath: webpackConfig.output.publicPath,
    quiet: true  //向控制台显示任何内容 
}))


// 这个方法和下边注释的方法做用同样,就是设置访问静态文件的路径
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)
})

文件都写好了咱们,能够直接执行 node server,咱们也能够在 package.json中制定命令

"scripts": {
    "start": "node server.js"
  },

而后运行npm start,以后咱们会在命令行中看到,

目录

而后咱们打开 http://localhost:9090

当我咱们修改index.jssub.jsindex.css 中的内容时,webpack会自动给咱们编译文件,咱们刷新浏览器就能够看到,编译后的文件。编编译的文件是放在内存中的,咱们的实际文件中并不会看到,到这里,咱们肯会想,若是咱们保存以后,文件被编译好,浏览器自动刷新多好,这时咱们就用到了 webpack-hot-middleware 插件,这个功能的实现请访问文章

webpack-hot-middleware 插件

webpack-dev-middleware的其它配置项

app.use(webpackDevMiddleware(webpack, {
     
    //这里options的一些配置见下表
}))

options: (这里只有publicPath 是必需的,而全部其余选项都是可选的 )

noInfo: false,
//  显示无信息到控制台(仅警告和错误) 

quiet: false,
//  向控制台显示任何内容 

lazy: true,
//  切换到延迟模式 
//  这意味着没有观看,而是从新编译每一个请求  

watchOptions: {
aggregateTimeout: 300,
poll: true
},
// watch options (only lazy: false) 

publicPath: "/assets/",
//  绑定中间件的公共路径 
//  使用与webpack相同 

index: "index.html",
//  Web服务器的索引路径,默认为“index.html”。 
//  若是falsy(但不是未定义),服务器将不会响应到根URL的请求。 

headers: { "X-Custom-Header": "yes" },
//  自定义标题  

mimeTypes: { "text/html": [ "phtml" ] },
//  添加自定义mime /扩展映射 
// https://github.com/broofa/node-mime#mimedefine  
// https://github.com/webpack/webpack-dev-middleware/pull/150  

stats: {
  colors: true
},
//  用于造成统计信息的选项 

reporter: null,
//  提供自定义记录器来更改日志显示的方式。 

serverSideRender: false,
//  关闭服务器端渲染模式。有关详细信息,请参阅服务器端渲染部分。

更加高级的API请访问:

https://github.com/webpack/webpack-dev-middleware

相关文章
相关标签/搜索