- Published on
第十一周:模块联邦 - 微前端
- Authors
- Name
- AgedCoffee
- @__middle__child
技术
Module Federation - 模块联邦
webpack 5 支持了模块联邦特性
// App2
const { ModuleFederationPlugin } = require('webpack').container
const path = require('path')
module.exports = {
entry: './src/index',
mode: 'development',
devServer: {
static: path.join(__dirname, 'dist'),
port: 3002,
},
output: {
publicPath: 'auto',
},
plugins: [
new ModuleFederationPlugin({
// 远程组件的应用名称
name: 'app2',
// 远程组件的入口文件
filename: 'remoteEntry.js',
// 定义需要导出的组件列表
exposes: {
'./App': './src/App',
'./Component': './src/component',
},
// 可以被共享的模块
shared: { react: { singleton: true }, 'react-dom': { singleton: true } },
}),
],
}
// App1
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { ModuleFederationPlugin } = require('webpack').container
const path = require('path')
module.exports = {
entry: './src/index',
mode: 'development',
devServer: {
static: path.join(__dirname, 'dist'),
port: 3001,
},
output: {
publicPath: 'auto',
},
plugins: [
new ModuleFederationPlugin({
// 当前应用名称
name: 'app1',
// 远程应用加载js入口列表
remotes: {
app2: 'app2@http://localhost:3002/remoteEntry.js',
},
//共享的模块
shared: { react: { singleton: true }, 'react-dom': { singleton: true } },
}),
],
}
Your Code Doesn't Have to Be a Mess
- 定义明确的目标
- 建立约束
- 对不断增长的新需求说不,明确自己要做的主要需求
- 定期删除不必要的死代码和死依赖
- 最小化需要的依赖
工具
BackgroundMusic
Mac 不同的 APP 调整不同的音量
arctype
数据库可视化工具
snoopForms
低代码搭建问卷
vytal
一个 Chrome 浏览器插件,可以修改你的时区、语言、地理位置和 Useragent 等设定,从而骗过页面脚本的 IP 侦测。
react-chrono
TimeLine 组件
生活
一句话
软件开发的目标不是类型安全、100% 的测试覆盖率、流畅的代码逻辑、完善的开发工具、高效的系统、使用最好的编程语言、优雅的 API 设计、快速的反馈循环、编写很棒的代码等等...... 软件开发的真正目标只有一个:发布解决客户问题的软件,为客户提供价值。
-- 《成为专业程序员 10 周年的感悟》
人们拥有一种神奇的能力,就是使事情发生。但是大多数人从来不敢尝试这种能力,只是默默接受世界本来的样子。
-- Sam Altman《如何成功》