最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 不小心将 Webpack 升级后我搞定了微前端。

    正文概述 掘金(勾崽)   2021-01-20   539

    昨天项目升级的时候,把 Webpack 升级了一个版本。瞬间让我囧大了,你懂的,我就不说了。反正给我一顿操作啊,终于摆平了。

    再梳理项目的时候,我用 Webpack 新版本的模块联邦还真实现了应用程序和应用程序之间的引用。一个微前端的雏形就出现了!

    借这个机会,刚好把 Webpack 的微前端实现流程介绍一下。

    创建两个应用

    既然是应用和应用之间的引用,所以我们就创建两个项目,一个叫 app,一个叫 slide。

    app 项目的配置文件 webpack.config.js 内容如下:

    //app/webpack.config.js
    const path = require("path")
    const HtmlWebpackPlugin = require("html-webpack-plugin")
    //微前端的模块
    const ModuleFederationPlugin = require("webpack").container.ModuleFederationPlugin;
    module.exports = {
        mode:"development",
        devtool:false,
        entry:"./src/index.js",
        output:{
           filename:"build.js",
           path: path.resolve(__dirname,"dist")
        },
        devServer:{
            contentBase: path.join(__dirname, 'dist'),
            port:8081
        },
        module:{
            rules:[
                {
                    test:/\.js$/,
                    exclude:/node_modules/,
                    use:{
                        loader:"babel-loader"
                    }
                }
            ]
        },
        plugins:[
            new HtmlWebpackPlugin({
                title:"webpack5",
                template:"./public/index.html"
            }),
            new ModuleFederationPlugin({
                name:"remote",
                // library:{type:"var",name:"remote"},
                filename:"remoteEntry.js",
                exposes:{  //导出
                    "./App":"./src/App.js"
                }
            })
        ]
    
    ​}
    

    Slide 项目的配置文件 webpack.config.js 内容如下:

    const path = require("path")
    const HtmlWebpackPlugin = require("html-webpack-plugin")
    // 模块联邦
    const ModuleFederationPlugin = require("webpack").container.ModuleFederationPlugin;
    module.exports = {
        mode:"development",
        devtool:false,
        entry:"./src/index.js",
        output:{
            filename:"build.js",
           path: path.resolve(__dirname,"dist")
        },
        devServer:{
            contentBase: path.join(__dirname, 'dist'),
            port:3000
        },
        module:{
            rules:[
                {
                    test:/\.js$/,
                    exclude:/node_modules/,
                    use:{
                        loader:"babel-loader"
                    }
                }
            ]
        },
        plugins:[
            new HtmlWebpackPlugin({
                title:"webpack5",
                template:"./public/index.html"
            }),
            new ModuleFederationPlugin({
                name:"slide",
                library:{type:"var",name:"slide"},
                remotes:{
                    "remote":"remote@http://127.0.0.1:8081/remoteEntry.js"
                }
            })
        ]
    
    ​}
    

    重点

    在 ModuleFederationPlugin 实例化的时候传入参数 options 的字段说明。

    • name 模块名

    • library 目前看到的用法有 { type: "var" } { type: "commonjs-module" },可以用来指定模块的使用规范

    • remotes 需要依赖的模块名

    • exposes 暴露出的模块,可以有多个

    • shared app 打包暴露模块时,不会将 shared 打包,是两个应用的共享依赖,比如 react vue 等

    注意:library 是对外导出的一种规范,前端使用 {type:"var"}。在引入的应用程序中这个字段不要加哈,不然会不显示内容,而被引入模块可以加上。

    还有就是 exposes 和 remotes 的字段小伙伴们也要注意。

    • exposes 的暴露字段要写上 ./name

    • remotes 的字段跟暴露模块的 name 保持一致,里面别名的定义也要一致

    最后,两个应用同时启动,就会发现最终你要的应用就把其他应用的模块也引入进来了(●'◡'●)。


    起源地下载网 » 不小心将 Webpack 升级后我搞定了微前端。

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元