<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不小心將 Webpack 升級后我搞定了微前端。

          共 3092字,需瀏覽 7分鐘

           ·

          2021-01-19 18:34

          嗨,我是你穩(wěn)定更新、持續(xù)輸出的勾勾。



          今天項(xiàng)目升級的時(shí)候,把 Webpack 升級了一個(gè)版本。瞬間讓我囧大了,你懂的,我就不說了。反正給我一頓操作啊,終于擺平了。


          再梳理項(xiàng)目的時(shí)候,我用 Webpack 新版本的模塊聯(lián)邦還真實(shí)現(xiàn)了應(yīng)用程序和應(yīng)用程序之間的引用。一個(gè)微前端的雛形就出現(xiàn)了!


          借這個(gè)機(jī)會(huì),剛好把 Webpack 的微前端實(shí)現(xiàn)流程介紹一下。


          創(chuàng)建兩個(gè)應(yīng)用


          既然是應(yīng)用和應(yīng)用之間的引用,所以我們就創(chuàng)建兩個(gè)項(xiàng)目,一個(gè)叫 app,一個(gè)叫 slide。


          app 項(xiàng)目的配置文件 webpack.config.js 內(nèi)容如下:

          //app/webpack.config.jsconst 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:{  //導(dǎo)出                "./App":"./src/App.js"            }        })    ]
          }


          Slide 項(xiàng)目的配置文件 webpack.config.js 內(nèi)容如下:

          const path = require("path")const HtmlWebpackPlugin = require("html-webpack-plugin")// 模塊聯(lián)邦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"            }        })    ]
          }


          重點(diǎn)


          在 ModuleFederationPlugin 實(shí)例化的時(shí)候傳入?yún)?shù) options 的字段說明。


          • name 模塊名

          • library 目前看到的用法有 { type: "var" } { type: "commonjs-module" },可以用來指定模塊的使用規(guī)范

          • remotes 需要依賴的模塊名

          • exposes 暴露出的模塊,可以有多個(gè)

          • shared app 打包暴露模塊時(shí),不會(huì)將 shared 打包,是兩個(gè)應(yīng)用的共享依賴,比如 react vue 等


          注意:library 是對外導(dǎo)出的一種規(guī)范,前端使用 {type:"var"}。在引入的應(yīng)用程序中這個(gè)字段不要加哈,不然會(huì)不顯示內(nèi)容,而被引入模塊可以加上。


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


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

          • remotes 的字段跟暴露模塊的 name 保持一致,里面別名的定義也要一致


          最后,兩個(gè)應(yīng)用同時(shí)啟動(dòng),就會(huì)發(fā)現(xiàn)最終你要的應(yīng)用就把其他應(yīng)用的模塊也引入進(jìn)來了(●'?'●)。


          喜歡的小伙伴可以 fork 去(? ?_?)?。

          https://github.com/cuiweijun/moduleFederation


          推薦閱讀:

          騰訊QQ偷我瀏覽記錄到底想干嘛。

          Webpack 究竟解決了什么問題?

          是我 Web 端配不上阿里了。

          前端人因?yàn)?Vue3 的 Ref-sugar 提案打起來了!


          點(diǎn)點(diǎn)“”和“在看”,保護(hù)頭發(fā),減少bug。

          瀏覽 73
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美三级韩国三级日本三斤在线观看en | 蜜芽av在线播放 免费成人性爱网站 | 天天澡日日久 | 看免费A片| 免费黄色视频网站在线 |