如今,有几种构建分布式前端应用程序的方法。对于建立分布式组件的环境以及管理依赖和协调可见组件的不同方式的人来说,还有许多框架可以使生活更轻松。
在本文中,我将使用Zack Jackson和其他 Core Developers提出的架构模型“ Module Federation ”。由于联邦模块是规范,因此在不同的模块捆绑器(例如汇总)中实现了实现。使用最高级API的移植MA是WebPack。输入使用WebPack的ModuleFederation插件编写的本文示例。
启动一个项目的最大粉丝在支持联邦模块的支持下是由杰克·赫灵顿(Jack Herrington)开发的吸引人的攀登(他的YouTube频道都有很多关于微型前端的信息,值得一看的是https://www.youtube.com/c/jackherrington)。
>使用CLI只需运行命令
npx create-mf-app
遵循CLI的仪器。她会问您一些信息,例如应用程序名称,框架,Localhost门等。
? Pick the name of your app: host
? Project Type: Application
? Port number: 8080
? Framework: vanilla
? Language: javascript
? CSS: CSS
Your 'host' project is ready to go.
Next steps:
▶️ cd host
▶️ npm install
▶️ npm start
执行这些步骤后,我们可以评估一些重要的文件。
请参阅webpack.config.js
文件是我们微型前端的配置所在的位置。该文件的插件属性是。您必须查看称为ModuleFederationPlugin
的插件的配置,并且必须与它相似:
//...
plugins: [
//...
new ModuleFederationPlugin({
name: "host",
filename: "remoteEntry.js",
remotes: {},
exposes: {},
shared: {
...require("./package.json").dependencies,
},
}),
//...
]
在此插件中,我们将完成远程转移的所有配置和联合(微型前端)。
在模块联合文献中,他们称为远程模块微型前端。从这里开始,我还将使用母亲或偏远母亲的这个命名法。
模块联合会策略的一个很大的优势是,远程转移是真正的本地JavaScript转移。您通常与Koud3或Koud4一起使用的母亲。与其他微型前端策略(例如使用软件包作为依赖的单SPA)来确保组件集成不同,模块联合会仅使用JavaScript。这将我们带到了package.json
文件。
如果您选择了一个香草项目,则没有外部依赖性。只有koud6才能转介代码以确保与所有浏览器的兼容性。如果您选择了任何框架,例如React或Vue,您会发现它们是您项目的谷物依赖性。这是轰动的!的
配置项目,以便您的组件可以在另一个项目中使用
如前所述,我们将在webpack.config.js
文件中进行所有配置。
了解ModulefederationPlugin的主要特性
- 名称属性:职责的名称。也将在
import x from name
中的其他项目中称为 - 文件名属性:将在构建中生成的文件的名称包含组件的“合同”。
- 共享属性:您可以在这里声明您的依赖性包,可以共享哪些软件包。例如,如果您在屏幕上有两个远程组件,并且两个使用React,则无需两次导入React,这是可以在屏幕上的所有组件之间共享的依赖性。
- 裸露的财产:在这里,我们声明我们要将项目的哪些部分曝光为微观前端。我们可以展示文件或徒劳。声明非常简单。关键是职责的名称,值是文件的路径。
....
plugins: [
new VueLoaderPlugin(),
new ModuleFederationPlugin({
name: "YourPackageName",
filename: "remoteEntry.js",
remotes: {},
exposes: {
"yourModuleName": "./src/yourModule/index.js",
},
shared: require("./package.json").dependencies,
}),
仅在我们将应用程序中的构建中构建时,才能创建包含他职责的整个宣言,他拥有的依赖,哪些功能,其他文件等。
现在,配置了所有内容,都可以在项目上构建构建,并揭示HTTP服务器上构建工件的组合(Geralemtne是“ Dist”文件夹)。如果您没有运行任何服务器,则可以从NPM(https://www.npmjs.com/package/http-server)中提供的 http-server软件包启动。
根据包装的文档,您可以在全球安装
npm install --global http-server
并使用它在您的构建伪影文件夹中运行,例如:
http-server ./dist
准备好了!您的远程模块的清单文件可通过HTTP访问。 ð¥³ðð
在另一个项目中使用您的职责
在另一个终端中使用' create-mf-app '等于第一个。
您创建的项目,您可以将第一个项目的导出母亲导入,就好像是NPM软件包一样。您的项目甚至没有远程离开该项目。
为此,您需要参考该项目在WebPack插件配置的“远程”属性上不符合一个项目,如前所述。
远程依赖的声明与NPM软件包的声明有点不同。查看差异: package.json
{
//...
"dependencies": {
"axios": "^0.27.2",
}
}
webpack.config.js
//...
plugins: [
new ModuleFederationPlugin({
// ...
remotes: {
"App1": "http://localhost:8080/remoteEntry.js",
},
// ...
}),
//...
]
要宣布我们的偏远母亲,我们给他一个名字,并参考他的互联网地址。如果您使用HTTP-Server在Localhost执行项目,则门应该是HTTP-Server正在运行的项目。在此示例的情况下为8080。
â是那个家伙!只是插件中的一种非常简单的配置,因此一个项目是指另一个项目,它们可以共享功能!
有关联合会的更多信息,申请示例,文档和等。我将留下一些链接。
- https://webpack.js.org/concepts/module-federation/
- https://github.com/module-federation
- https://github.com/module-federation/module-federation-examples
也是一个非常好的位置案例
的文章