zoukankan      html  css  js  c++  java
  • webpack-dev-middleware

    webpack-dev-middleware

    什么是webpack-dev-middleware

    webpack-dev-middleware是一个容器(wrapper),它可以把webpack处理后的文件传递给一个服务器(server)。webpack-dev-middleware就是express的一个中间件

    webpack-dev-server与webpack-dev-middleware区别

    webpack-dev-server实际上相当于启用了一个express的Http服务器+调用了webpack-dev-middleware。它的作用主要是用来服务资源文件的。这个
    Http服务器和client使用了websocket通讯协议,原始文件做出改动后,webpack-dev-server会用webpack实时的编译,再用webpack-dev-middleware
    将webpack编译后文件会输出到内存中。适合纯前端项目,很难编写后端服务,进行整合

    webpack-dev-middleware输出的文件存在于内存中。你定义了webpack.config,webpack就能据此梳理出entry和output模块的关系脉络,儿webpack-dev-middleware
    就在此基础上行程一个文件映射系统,每当应用程序请求一个文件,它匹配到了就把内存中缓存的对应结果以文件的格式返回给你,反之则进入到下一个中间件。
    因为是内存型文件系统,所以重建速度非常快,很适合于开发阶段用作静态资源服务器;因为webpack可以把任何一种资源都当做是模块来处理,因此能向客户端反馈各种格式的资源,
    所以可以替代HTTP服务器。事实上,大多数webpack用户用过的webpack-dev-server就是一个exxpress+webpack-dev-middleware的实现。二者的区别仅在于webpack-dev-server
    是封装好的,除了webpack.config和命令行参数之外,很难去做定制型的开发。而webpack-dev-middleware是中间件,可以编写自己的后端服务然后把它整合进来,相对而言比较灵活自由。

    webpack-dev-middleware示例

    • 安装express webpack-dev-middleware npm install --save-dev express webpack-dev-middleware
    • 新建文件webpack-dev-middleware
    • 在webpack-dev-middleware目录下新建文件webpack-dev-middleware.js
    • 在webpack-dev-middleware目录下新建文件server.js
    • 在webpack-dev-middleware目录下新建文件src
    • 在src目录下新建文件js和index.js
    • 在js目录下新建文件a.js和b.js
    • 文件目录如下

    webpack-dev-middleware.js内容如下

    const path = require("path");
    
    module.exports = {
    	entry:path.resolve(__dirname,"src/index.js"),
    	output:{
    		filename:"[name].js",
    		path:path.resolve(__dirname,"dist"),
    		publicPath:"/"
    	},
    	
    }
    
    

    这里的publicPath是生成的新文件所指向的路径,可以用于模拟CDN资源引用

    server.js内容如下

    const webpack = require("webpack");
    const express = require("express");
    const WebpackDevMiddleware = require("webpack-dev-middleware");
    const app = express();
    const config = require("./webpack-dev-middleware.js");
    const compiler = webpack(config);
    app.use(WebpackDevMiddleware(compiler,{
    	publicPath:config.output.publicPath
    }));
    app.listen(3000,function(){
    	console.log("example app listening on port 3000
    ")
    })
    
    

    这里的publicPath只建议配置相对路径,因为webpack-dev-middleware在使用的时候,配置的publicPath,用于标记从内存的那个路径去存放和查找资源,这意味
    着webpack-dev-middleware的publicPath必须是相对路径

    index.js内容如下

    require("./src/a.js");
    require("./src/b.js");
    console.log("this is index.js")
    
    

    a.js内容如下

    console.log("this a file");
    
    

    b.js内容如下

    console.log('this is b file');
    
    

    修改packge.json

    "script":{
    	"test": "echo "Error: no test specified" && exit 1",
        "dev": "webpack-dev-server --config demo/webpack-dev-server/webpack-dev-server.js",
        "server":"node demo/webpack-dev-middleware/server.js"
    }
    
    • 在终端执行命令 npm run server
    • 访问lhttp://localhost:3000/即可看见结果
      运行结果如下

  • 相关阅读:
    第4章:kubectl命令行管理工具
    Docker_CICD笔记
    Harbor镜像仓库
    centos7 安装最新的 wiki confluence
    Centos7.5使用SSH密钥登录
    一篇文章带你搞懂 etcd 3.5 的核心特性
    腾讯云边缘容器 TKE Edge 国内首批通过边缘容器技术能力认证
    揭秘有状态服务上 Kubernetes 的核心技术
    腾讯云云原生混合云-TKE发行版
    kubernetes 降本增效标准指南|理解弹性,应用弹性
  • 原文地址:https://www.cnblogs.com/dehenliu/p/12523182.html
Copyright © 2011-2022 走看看