Next.js+webpack federation-module 有没有搞头

667 阅读2分钟

什么是Next.js

Next.js 是一个 React框架,它为您提供了创建 Web 应用程序的构建块。

我们所说的框架是指 Next.js 处理 React 所需的工具和配置,并为您的应用程序提供额外的结构、功能和优化

image.png

优点:
  1. 首屏加载速度快
    NextJS 的产物类似 MPA(多页面应用),在请求页面时会对当前页面的资源进行按需加载,而不是去加载整个应用, 相对于 SPA 而言,可以实现更为极致的用户体验。
  2. SEO优化好
    SSR \ SSG \ ISR 支持页面内容预加载,提升了搜索引擎的友好性。
  3. 内置特性易用且极致
    NextJS 内置 getStaticPropsgetServerSidePropsnext/imagenext/linknext/script等特性,充分利用该框架的这些特性,为用户提供更高层次的体验。

什么是Federation-module

多个独立的构建可以组成一个应用程序,这些独立的构建之间不应该存在依赖关系,因此可以单独开发和部署它们。

这通常被称作微前端,但并不仅限于此。 我们区分本地模块和远程模块。本地模块即为普通模块,是当前构建的一部分。远程模块不属于当前构建,并在运行时从所谓的容器加载。

加载远程模块被认为是异步操作。当使用远程模块时,这些异步操作将被放置在远程模块和入口之间的下一个 chunk 的加载操作中。如果没有 chunk 加载操作,就不能使用远程模块。

Next.js结合 Federation-module

1 . 初始化两个项目app(作为远程),app1(作为本地)
npx create-next-app@latest
# or
yarn create next-app
2. 配置remote的webpack配置

image.png @module-federation/nextjs-mf第三方包是为了解决webpack提供的federation-module插件会导致加载路径不对

3. 导出组件(懒得写组件,直接导出antd的)

image.png

4. 配置local的webpack(next.js资源是放在_next下面)

image.png

5.在local中使用远程组件(需要使用dynamic导入)

image.png

image.png

在local项目中没有安装antd也能通过加载reomote的使用antd组件了 image.png image.png 在30001端口可以看到已经成功加载了3000端口的remoteEntry.js文件,也加载了chunks的buttonjs

以上代码托管地址: github.com/chenzhaozha…