咱们在使用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-loader
web
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.js
、sub.js
、 index.css
中的内容时,webpack会自动给咱们编译文件,咱们刷新浏览器就能够看到,编译后的文件。编编译的文件是放在内存中的,咱们的实际文件中并不会看到,到这里,咱们肯会想,若是咱们保存以后,文件被编译好,浏览器自动刷新多好,这时咱们就用到了 webpack-hot-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请访问: