Skip to content

Commit a57000b

Browse files
committed
feat: share custom path module-federation#131
1 parent ef9bc5a commit a57000b

File tree

5 files changed

+72
-2
lines changed

5 files changed

+72
-2
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// vite.config.js
2+
import { federation } from "file:///Users/zhanghongen/Desktop/zwork/open-code/vite8/lib/index.cjs";
3+
import react from "file:///Users/zhanghongen/Desktop/zwork/open-code/vite8/node_modules/.pnpm/@[email protected][email protected]_@[email protected][email protected][email protected]_/node_modules/@vitejs/plugin-react/dist/index.mjs";
4+
import { defineConfig } from "file:///Users/zhanghongen/Desktop/zwork/open-code/vite8/node_modules/.pnpm/[email protected]_@[email protected][email protected][email protected]/node_modules/vite/dist/node/index.js";
5+
import topLevelAwait from "file:///Users/zhanghongen/Desktop/zwork/open-code/vite8/node_modules/.pnpm/[email protected]_@[email protected][email protected][email protected]_@types+node@22._krbzckfzdnw5tslgq6xfzhp7ly/node_modules/vite-plugin-top-level-await/exports/import.mjs";
6+
var vite_config_default = defineConfig({
7+
server: {
8+
open: true,
9+
port: 5175
10+
},
11+
preview: {
12+
port: 5175
13+
},
14+
// base: 'http://localhost:5175',
15+
plugins: [
16+
react(),
17+
federation({
18+
name: "viteViteHost",
19+
remotes: {
20+
mfapp01: "mfapp01@https://unpkg.com/[email protected]/dist/remoteEntry.js",
21+
remote2: "mfapp02@https://unpkg.com/mf-app-02/dist/remoteEntry.js",
22+
remote3: "remote1@https://unpkg.com/[email protected]/dist/mf-manifest.json",
23+
"@namespace/viteViteRemote": "http://localhost:5176/mf-manifest.json"
24+
},
25+
filename: "remoteEntry-[hash].js",
26+
manifest: true,
27+
shared: {
28+
vue: {},
29+
"react/": {
30+
requiredVersion: "18"
31+
},
32+
"react-dom": {},
33+
"ag-grid-community": {},
34+
"ag-grid-react": {},
35+
"@emotion/react": {},
36+
"styled-components": { singleton: true },
37+
"@emotion/styled": {},
38+
"@mui/material": {}
39+
},
40+
runtimePlugins: ["./src/mfPlugins"]
41+
}),
42+
// If you set build.target: "chrome89", you can remove this plugin
43+
false
44+
],
45+
build: {
46+
target: "chrome89"
47+
}
48+
});
49+
export {
50+
vite_config_default as default
51+
};
52+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvemhhbmdob25nZW4vRGVza3RvcC96d29yay9vcGVuLWNvZGUvdml0ZTgvZXhhbXBsZXMvdml0ZS12aXRlL3ZpdGUtaG9zdFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3poYW5naG9uZ2VuL0Rlc2t0b3Avendvcmsvb3Blbi1jb2RlL3ZpdGU4L2V4YW1wbGVzL3ZpdGUtdml0ZS92aXRlLWhvc3Qvdml0ZS5jb25maWcuanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3poYW5naG9uZ2VuL0Rlc2t0b3Avendvcmsvb3Blbi1jb2RlL3ZpdGU4L2V4YW1wbGVzL3ZpdGUtdml0ZS92aXRlLWhvc3Qvdml0ZS5jb25maWcuanNcIjtpbXBvcnQgeyBmZWRlcmF0aW9uIH0gZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL3ZpdGUnO1xuaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0JztcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHRvcExldmVsQXdhaXQgZnJvbSAndml0ZS1wbHVnaW4tdG9wLWxldmVsLWF3YWl0JztcblxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHNlcnZlcjoge1xuICAgIG9wZW46IHRydWUsXG4gICAgcG9ydDogNTE3NSxcbiAgfSxcbiAgcHJldmlldzoge1xuICAgIHBvcnQ6IDUxNzUsXG4gIH0sXG4gIC8vIGJhc2U6ICdodHRwOi8vbG9jYWxob3N0OjUxNzUnLFxuICBwbHVnaW5zOiBbXG4gICAgcmVhY3QoKSxcbiAgICBmZWRlcmF0aW9uKHtcbiAgICAgIG5hbWU6ICd2aXRlVml0ZUhvc3QnLFxuICAgICAgcmVtb3Rlczoge1xuICAgICAgICBtZmFwcDAxOiAnbWZhcHAwMUBodHRwczovL3VucGtnLmNvbS9tZi1hcHAtMDFAMS4wLjExL2Rpc3QvcmVtb3RlRW50cnkuanMnLFxuICAgICAgICByZW1vdGUyOiAnbWZhcHAwMkBodHRwczovL3VucGtnLmNvbS9tZi1hcHAtMDIvZGlzdC9yZW1vdGVFbnRyeS5qcycsXG4gICAgICAgIHJlbW90ZTM6XG4gICAgICAgICAgJ3JlbW90ZTFAaHR0cHM6Ly91bnBrZy5jb20vcmVhY3QtbWFuaWZlc3QtZXhhbXBsZV9yZW1vdGUxQDEuMC42L2Rpc3QvbWYtbWFuaWZlc3QuanNvbicsXG4gICAgICAgICdAbmFtZXNwYWNlL3ZpdGVWaXRlUmVtb3RlJzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTE3Ni9tZi1tYW5pZmVzdC5qc29uJyxcbiAgICAgIH0sXG4gICAgICBmaWxlbmFtZTogJ3JlbW90ZUVudHJ5LVtoYXNoXS5qcycsXG4gICAgICBtYW5pZmVzdDogdHJ1ZSxcbiAgICAgIHNoYXJlZDoge1xuICAgICAgICB2dWU6IHt9LFxuICAgICAgICAncmVhY3QvJzoge1xuICAgICAgICAgIHJlcXVpcmVkVmVyc2lvbjogJzE4JyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlYWN0LWRvbSc6IHt9LFxuICAgICAgICAnYWctZ3JpZC1jb21tdW5pdHknOiB7fSxcbiAgICAgICAgJ2FnLWdyaWQtcmVhY3QnOiB7fSxcbiAgICAgICAgJ0BlbW90aW9uL3JlYWN0Jzoge30sXG4gICAgICAgICdzdHlsZWQtY29tcG9uZW50cyc6IHsgc2luZ2xldG9uOiB0cnVlIH0sXG4gICAgICAgICdAZW1vdGlvbi9zdHlsZWQnOiB7fSxcbiAgICAgICAgJ0BtdWkvbWF0ZXJpYWwnOiB7fSxcbiAgICAgIH0sXG4gICAgICBydW50aW1lUGx1Z2luczogWycuL3NyYy9tZlBsdWdpbnMnXSxcbiAgICB9KSxcbiAgICAvLyBJZiB5b3Ugc2V0IGJ1aWxkLnRhcmdldDogXCJjaHJvbWU4OVwiLCB5b3UgY2FuIHJlbW92ZSB0aGlzIHBsdWdpblxuICAgIGZhbHNlICYmIHRvcExldmVsQXdhaXQoKSxcbiAgXSxcbiAgYnVpbGQ6IHtcbiAgICB0YXJnZXQ6ICdjaHJvbWU4OScsXG4gIH0sXG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBeVosU0FBUyxrQkFBa0I7QUFDcGIsT0FBTyxXQUFXO0FBQ2xCLFNBQVMsb0JBQW9CO0FBQzdCLE9BQU8sbUJBQW1CO0FBRzFCLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFFBQVE7QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUjtBQUFBO0FBQUEsRUFFQSxTQUFTO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsUUFDUCxTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVCxTQUNFO0FBQUEsUUFDRiw2QkFBNkI7QUFBQSxNQUMvQjtBQUFBLE1BQ0EsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsUUFBUTtBQUFBLFFBQ04sS0FBSyxDQUFDO0FBQUEsUUFDTixVQUFVO0FBQUEsVUFDUixpQkFBaUI7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsYUFBYSxDQUFDO0FBQUEsUUFDZCxxQkFBcUIsQ0FBQztBQUFBLFFBQ3RCLGlCQUFpQixDQUFDO0FBQUEsUUFDbEIsa0JBQWtCLENBQUM7QUFBQSxRQUNuQixxQkFBcUIsRUFBRSxXQUFXLEtBQUs7QUFBQSxRQUN2QyxtQkFBbUIsQ0FBQztBQUFBLFFBQ3BCLGlCQUFpQixDQUFDO0FBQUEsTUFDcEI7QUFBQSxNQUNBLGdCQUFnQixDQUFDLGlCQUFpQjtBQUFBLElBQ3BDLENBQUM7QUFBQTtBQUFBLElBRUQ7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsRUFDVjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function () {
2+
console.log(12313123);
3+
}

examples/vite-vite/vite-remote/src/main.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { App2 } from './App2';
77
import { EmotionDemo } from './EmotionDemo';
88
import { MuiDemo } from './MuiDemo';
99
import StyledDemo from './StyledDemo';
10+
import "./customShare";
1011

1112
const root = ReactDOM.createRoot(document.getElementById('app'));
1213
root.render(

examples/vite-vite/vite-remote/vite.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export default defineConfig({
3030
filename: 'remoteEntry-[hash].js',
3131
manifest: true,
3232
shared: {
33+
'./src/customShare': {},
3334
vue: {},
3435
'react/': {},
3536
react: {

src/utils/normalizeModuleFederationOptions.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { SharedConfig, ShareStrategy } from '@module-federation/runtime/types';
2+
import { isAbsolute } from "pathe";
23

34
export type RemoteEntryType =
45
| 'var'
@@ -132,9 +133,13 @@ function normalizeShareItem(
132133
): ShareItem {
133134
let version: string | undefined;
134135
try {
135-
version = require(path.join(removePathFromNpmPackage(key), 'package.json')).version;
136+
if (isAbsolute(key) || key.startsWith("./")) {
137+
version = "1.0.0"
138+
} else {
139+
version = require(path.join(removePathFromNpmPackage(key), 'package.json')).version;
140+
}
136141
} catch (e) {
137-
console.log(e);
142+
console.log(e)
138143
}
139144
if (typeof shareItem === 'string') {
140145
return {
@@ -313,6 +318,14 @@ export function getNormalizeModuleFederationOptions() {
313318

314319
export function getNormalizeShareItem(key: string) {
315320
const options = getNormalizeModuleFederationOptions();
321+
if (isAbsolute(key) || key.startsWith("./")) {
322+
const shareItem = Object.keys(options.shared).filter(shareKey => {
323+
if (shareKey.startsWith(key)) {
324+
return
325+
}
326+
})?.[0]
327+
if (shareItem) return shareItem
328+
}
316329
const shareItem =
317330
options.shared[removePathFromNpmPackage(key)] ||
318331
options.shared[removePathFromNpmPackage(key) + '/'];

0 commit comments

Comments
 (0)