ModuleFederationPlugin
ModuleFederationPluginì ì¬ì©íë©´ ë°íìì ë¤ë¥¸ ë
립 ë¹ëì í¨ê» 모ëì ì ê³µíê±°ë ì¬ì©í ì ììµëë¤.
import webpack from "webpack";
const { ModuleFederationPlugin } = webpack.container;
export default {
plugins: [
new ModuleFederationPlugin({
// ì¬ë¬ ìµì
ì íì
ì¤í¬ë¦½í¸ë¡ ìì±í©ëë¤.
runtime: string | false,
}),
],
};Options
runtime
í¹ì í ì´ë¦ì¼ë¡ ìë¡ì´ ë°íì ì²í¬ë¥¼ ë§ëëë¤.
webpack.config.js
import webpack from "webpack";
const { ModuleFederationPlugin } = webpack.container;
export default {
plugins: [
new ModuleFederationPlugin({
runtime: "my-runtime-name",
}),
],
};Sharing libraries
ì¤ì ì 'shared' í¤ë¥¼ ì¬ì©íë©´ 모ë ì°í© ì¬ì´ì ê³µì ëë ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì ìí ì ììµëë¤. í¨í¤ì§ ì´ë¦ì package.jsonì 'dependencies' ì¹ì ì ìë ì´ë¦ê³¼ ëì¼í©ëë¤. ê·¸ë¬ë 기본ì ì¼ë¡ webpackì ë¼ì´ë¸ë¬ë¦¬ì ë£¨í¸ ë ë²¨ë§ ê³µì í©ëë¤.
import webpack from "webpack";
const { ModuleFederationPlugin } = webpack.container;
export default {
plugins: [
new ModuleFederationPlugin({
// date-fns를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
shared: ["date-fns"],
}),
],
};ë°ë¼ì ìì© íë¡ê·¸ë¨ìì ë¤ìê³¼ ê°ì ìì ì ìíí ì ììµëë¤.
import { format } from "date-fns";
format(new Date(2014, 1, 11), "MM/dd/yyyy");ê·¸ë¦¬ê³ webpackì date-fns를 ê³µì ë¼ì´ë¸ë¬ë¦¬ë¡ ì ìíë 모ë 모ë ì°í© ì¬ì´ì date-fns를 ìëì¼ë¡ ê³µì í©ëë¤.
ê·¸ë¬ë í¨í¤ì§ì ë£¨í¸ ë 벨ì ìë í목(ì: date-fns/locale/en-GB/index.js)ì ì¡ì¸ì¤íë ¤ë©´ 'ê³µì ' ì¤ì ìì í¨í¤ì§ ì´ë¦ì /를 ì¶ê°í´ì¼ í©ëë¤.
import webpack from "webpack";
const { ModuleFederationPlugin } = webpack.container;
export default {
plugins: [
new ModuleFederationPlugin({
// date-fns를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// í¨í¤ì§ì 모ë íì¼ì´ ê³µì ë©ëë¤
shared: ["date-fns/"],
}),
],
};The / 구문ì ì¬ì©íë©´ í¨í¤ì§ì 모ë íì¼ì ì¡ì¸ì¤í ì ììµëë¤. ê·¸ë¬ë í¹í ê°ë° 모ëììë ì±ë¥ì ìí¥ì 미ì¹ë¯ë¡ íìí ê²½ì°ìë§ ì¬ì©í´ì¼ í©ëë¤.
Specify package versions
ê³µì ë¼ì´ë¸ë¬ë¦¬ì ë²ì ì ì§ì íë ì¸ ê°ì§ ë°©ë²ì´ ììµëë¤.
Array syntax
ì´ êµ¬ë¬¸ì ì¬ì©íë©´ í¨í¤ì§ ì´ë¦ë§ ìë ë¼ì´ë¸ë¬ë¦¬ë¥¼ ê³µì í ì ììµëë¤. ì´ ì ê·¼ ë°©ìì íë¡í íì´íì ì í©íì§ë§ react ë° react-domê³¼ ê°ì ë¼ì´ë¸ë¬ë¦¬ì ì¶ê° ì구 ì¬íì´ íìí기 ë문ì ëê·ëª¨ íë¡ëì
íê²½ì¼ë¡ íì¥í ì ììµëë¤.
import webpack from "webpack";
const { ModuleFederationPlugin } = webpack.container;
export default {
plugins: [
new ModuleFederationPlugin({
// lodash를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// package.jsonì¼ë¡ë¶í° ë²ì ì ì¶ë¡ í©ëë¤.
// íì ë²ì ì íì¸íì§ ììµëë¤.
// ê·¸ëì íì ë°ê²¬ë ë ëì ë²ì ì ì¬ì©í©ëë¤.
shared: ["lodash"],
}),
],
};Object syntax
ì´ êµ¬ë¬¸ì ì¬ì©íë©´ í¨í¤ì§ ì´ë¦ì í¤ë¡ ì ìíê³ ë²ì (semver)ì ê°ì¼ë¡ ì ìí ì ìë ê° ê³µì ë¼ì´ë¸ë¬ë¦¬ë¥¼ ë³´ë¤ ì¸ë¶ì ì¼ë¡ ì ì´í ì ììµëë¤.
export default {
plugins: [
new ModuleFederationPlugin({
shared: {
// lodash를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// package.json ì¼ë¡ë¶í° ë²ì ì ì¶ë¡ í©ëë¤.
// 4.17 ì´ì 5 미ë§ì ë²ì ì¤ ìµìì ë²ì ì ì¬ì©íê² ë©ëë¤.
lodash: "^4.17.0",
},
}),
],
};Object syntax with sharing hints
ì´ êµ¬ë¬¸ì ì¬ì©íë©´ ê° ê³µì í¨í¤ì§ì íí¸ë¥¼ ì¶ê°ë¡ ì ê³µí ì ììµëë¤. í¨í¤ì§ì ì´ë¦ì í¤ë¡, ê³µì ëìì ìì í기 ìí íí¸ë¥¼ í¬í¨í ê°ì²´ë¥¼ ê°ì¼ë¡ ì ìíì¬ ì ê³µí ì ììµëë¤.
import { readFileSync } from "node:fs";
const deps = JSON.parse(
readFileSync(new URL("./package.json", import.meta.url)),
).dependencies;
export default {
plugins: [
new ModuleFederationPlugin({
shared: {
// react를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
react: {
requiredVersion: deps.react,
singleton: true,
},
},
}),
],
};Sharing hints
eager
boolean
ì´ íí¸ë¥¼ ì¬ì©íë©´ webpackì´ ë¹ë기ì ìì²ì íµí´ ë¼ì´ë¸ë¬ë¦¬ë¥¼ ê°ì ¸ì¤ë ëì ì ê³µë 모ëì´ë ëì²´ 모ëì ì§ì í¬í¨í ì ììµëë¤. ì¦, ì´ê¸° ì²í¬ìì ì´ ê³µì 모ëì ì¬ì©í ì ììµëë¤. ëí ì´ íí¸ê° íì±íëë©´ ì ê³µë 모ë 모ëê³¼ ëì²´ 모ëì´ íì ë¤ì´ë¡ëëë¤ë ì ì 주ìí´ì¼ í©ëë¤.
import
false | string
ì ê³µë 모ëì ê³µì ì í¨ë²ìì ë°°ì¹ëì´ì¼ í©ëë¤. ì´ ì ê³µë 모ëì ê³µì ì í¨ë²ìì ê³µì 모ëì´ ìê±°ë ë²ì ì´ ì í¨íì§ ìì ê²½ì° ëì²´ 모ë ìí ë í©ëë¤. (ì´ íí¸ì ê°ì 기본ì ì¼ë¡ íë¡í¼í° ì´ë¦ì¼ë¡ ì¤ì ë©ëë¤.)
packageName
string
ì¤ëª íì¼ìì íìí ë²ì ì ê²°ì íë ë° ì¬ì©ëë í¨í¤ì§ ì´ë¦ì ëë¤. âpackageNameâì ìì²ì¼ë¡ë¶í° í¨í¤ì§ ì´ë¦ì ìëì¼ë¡ ê²°ì í ì ìë ê²½ì°ìë§ íìí©ëë¤.
requiredVersion
false string
ì´ íëë íì í¨í¤ì§ ë²ì ì ì§ì í©ëë¤. "^1.2.3"ê³¼ ê°ì ìë©í± ë²ì ê´ë¦¬ë¥¼ íì©í©ëë¤. ëí ë²ì ì´ URLë¡ ì ê³µëë ê²½ì°(ì: "git+ssh://git@github.com:foo/bar.git#v1.0.0") ë²ì ì ê²ìí©ëë¤.
shareKey
string
ìì²ë ê³µì 모ëì ê³µì ì í¨ë²ììì âshareKeyâ í¤ ììì ì¡°íë©ëë¤.
shareScope
string
ê³µì ë²ìì ì´ë¦ì ëë¤.
singleton
boolean
âsingletonâì ê³µì ë²ììì ë¨ì¼ ë²ì ì ê³µì 모ëë§ íì©í©ëë¤.(기본ì ì¼ë¡ ë¹íì±íë¨) ì¼ë¶ ë¼ì´ë¸ë¬ë¦¬ë ì ì ë´ë¶ ìí를 ì¬ì©í©ëë¤.(ì: react, react-dom) ë°ë¼ì í ë²ì íëì ë¼ì´ë¸ë¬ë¦¬ ì¸ì¤í´ì¤ë§ ì¤ííë ê²ì´ ì¤ìí©ëë¤.
ê³µì ë²ìì ëì¼í ì¢ ìì±ì ê°ë ì¬ë¬ ë²ì ì´ ìë ê²½ì°, ê°ì¥ ëì ìë©í± ë²ì ì´ ì¬ì©ë©ëë¤.
strictVersion
boolean
âstrictVersionâì ì¬ì©íë©´ ë²ì ì´ ì í¨íì§ ìì ê²½ì° webpackì´ ê³µì 모ëì ê±°ë¶í ì ììµëë¤(ë¡ì»¬ fallback 모ëì ì¬ì©í ì ìê³ ê³µì 모ëì´ singletonì´ ìë ê²½ì° ê¸°ë³¸ê°ì trueë¡ ì¤ì ëê³ , ê·¸ë ì§ ìì¼ë©´ falseë¡ ì¤ì ëë©° íì ë²ì ì´ ì§ì ëì§ ìì ê²½ì° í¨ê³¼ê° ììµëë¤). íìí ë²ì ì´ ìì¼ë©´ ë°íì ì¤ë¥ê° ë°ìí©ëë¤.
version
false | string
ì ê³µë 모ëì ë²ì ì ëë¤. Webpackì´ ì¼ì¹íë ë®ì ë²ì ì ëì²´í ì ìì§ë§, ë ëì ë²ì ì ëì²´í ì ììµëë¤.
Webpackì 기본ì ì¼ë¡ ëíëìì package.json íì¼ì ìë ë²ì ì ì¬ì©í©ëë¤.
Additional examples
export default {
plugins: [
new ModuleFederationPlugin({
// vue를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// package.json ì¼ë¡ë¶í° ë²ì ì ì¶ë¡ í©ëë¤.
// íì ê³µì ë²ì ì ì¬ì©íì§ë§ ê³µì ë vueê° 2.6.5 ë¯¸ë§ ëë 3 ì´ì ë²ì ì¸ ê²½ì° ê²½ê³ ë¥¼ ì¶ë ¥í©ëë¤.
shared: {
vue: {
requiredVersion: "^2.6.5",
singleton: true,
},
},
}),
],
};export default {
plugins: [
new ModuleFederationPlugin({
// vue를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// ì ê³µë ë¡ì»¬ ë²ì ì´ ììµëë¤.
// ê³µì ë vueê° 2.6.5 ë¯¸ë§ ëë 3 ì´ì ë²ì ì´ë©´ ê²½ê³ ë¥¼ ë´ë³´ë
ëë¤.
shared: {
vue: {
import: false,
requiredVersion: "^2.6.5",
},
},
}),
],
};export default {
plugins: [
new ModuleFederationPlugin({
// vue를 ê³µì 모ëë¡ ì¶ê°í©ëë¤.
// ì ê³µë ë¡ì»¬ ë²ì ì´ ììµëë¤.
// ê³µì ë vueê° 2.6.5 ë¯¸ë§ ëë 3 ì´ì ë²ì ì´ë©´ ì¤ë¥ê° ë°ìí©ëë¤.
shared: {
vue: {
import: false,
requiredVersion: "^2.6.5",
strictVersion: true,
},
},
}),
],
};export default {
plugins: [
new ModuleFederationPlugin({
shared: {
"my-vue": {
// "my-vue" ê°ì ¸ì¤ê¸°ë¡ 참조í ì ììµëë¤.
import: "vue", // "vue" í¨í¤ì§ë ì ê³µë ëì²´ 모ëë¡ ì¬ì©ë©ëë¤.
shareKey: "shared-vue", // "shared-vue"ì´ë¦ì¼ë¡ ê³µì ë 모ëì ê³µì ì í¨ë²ìì ë°°ì¹ë©ëë¤.
shareScope: "default", // "default"ë¡ ê³µì ì í¨ë²ìê° ì ì©ë©ëë¤.
singleton: true, // ê³µì 모ëì ë¨ì¼ ë²ì ë§ íì©ë©ëë¤.
strictVersion: true, // ë²ì ì´ ì í¨íì§ ìì ë ê³µì ë²ì ì ì¬ì©íì§ ë§ìì¼ í©ëë¤. fallbackì´ ìë Singleton ëë 모ëì ë겨ì§ëë¤. ê·¸ë ì§ ìì¼ë©´ fallbackì´ ì¬ì©ë©ëë¤.
version: "1.2.3", // ê³µì 모ëì ë²ì ì
ëë¤.
requiredVersion: "^1.0.0", // ê³µì 모ëì ìµì ë²ì ì
ëë¤.
},
},
}),
],
};


