Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
张洪恩 committed Aug 31, 2024
1 parent 95bac58 commit b63c0bd
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 50 deletions.
25 changes: 0 additions & 25 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from './utils/normalizeModuleFederationOptions';
import normalizeOptimizeDepsPlugin from './utils/normalizeOptimizeDeps';
import { HOST_AUTO_INIT_PATH, HOST_AUTO_INIT_QUERY_STR, REMOTE_ENTRY_ID, WRAP_REMOTE_ENTRY_PATH, WRAP_REMOTE_ENTRY_QUERY_STR } from './virtualModules/virtualRemoteEntry';
import { getLocalSharedImportMapId } from './virtualModules/virtualShared_preBuild';
import { getLocalSharedImportMapPath } from './virtualModules/virtualShared_preBuild';

function federation(mfUserOptions: ModuleFederationOptions): Plugin[] {
const options = normalizeModuleFederationOptions(mfUserOptions);
Expand All @@ -33,7 +33,7 @@ function federation(mfUserOptions: ModuleFederationOptions): Plugin[] {
pluginProxyRemoteEntry(),
pluginProxyRemotes(options),
...pluginModuleParseEnd(((id: string) => {
return id.includes(HOST_AUTO_INIT_QUERY_STR) || id.includes(WRAP_REMOTE_ENTRY_QUERY_STR) || id.includes(REMOTE_ENTRY_ID) || id.includes(getLocalSharedImportMapId())
return id.includes(HOST_AUTO_INIT_QUERY_STR) || id.includes(WRAP_REMOTE_ENTRY_QUERY_STR) || id.includes(REMOTE_ENTRY_ID) || id.includes(getLocalSharedImportMapPath())
})),
...proxySharedModule({
shared,
Expand Down
21 changes: 6 additions & 15 deletions src/plugins/pluginProxySharedModule_preBuild.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { packageNameDecode } from '../utils/packageNameUtils';
import { PromiseStore } from "../utils/PromiseStore";
import { virtualPackageName } from '../utils/VirtualModule';
import { wrapManualChunks } from '../utils/wrapManualChunks';
import { addShare, generateLocalSharedImportMap, getLoadShareModulePath, getLocalSharedImportMapId, LOAD_SHARE_TAG, localSharedImportMapModule, PREBUILD_TAG, writeLoadShareModule, writeLocalSharedImportMap, writePreBuildLibPath } from '../virtualModules/virtualShared_preBuild';
import { addShare, generateLocalSharedImportMap, getLoadShareModulePath, getLocalSharedImportMapPath, LOAD_SHARE_TAG, PREBUILD_TAG, writeLoadShareModule, writeLocalSharedImportMap, writePreBuildLibPath } from '../virtualModules/virtualShared_preBuild';
export function proxySharedModule(
options: { shared?: NormalizedShared; include?: string | string[]; exclude?: string | string[] }
): Plugin[] {
Expand All @@ -19,16 +19,16 @@ export function proxySharedModule(
name: "generateLocalSharedImportMap",
enforce: "post",
resolveId(id) {
if (id.includes(getLocalSharedImportMapId()))
if (id.includes(getLocalSharedImportMapPath()))
return id
},
load(id) {
if (id.includes(getLocalSharedImportMapId())) {
if (id.includes(getLocalSharedImportMapPath())) {
return generateLocalSharedImportMap()
}
},
transform(code, id) {
if (id.includes(getLocalSharedImportMapId())) {
if (id.includes(getLocalSharedImportMapPath())) {
return generateLocalSharedImportMap()
}
}
Expand Down Expand Up @@ -96,7 +96,7 @@ export function proxySharedModule(
apply: "serve",
config(config) {
config.optimizeDeps = defu(config.optimizeDeps, {
exclude: [localSharedImportMapModule.getImportId()]
exclude: [getLocalSharedImportMapPath()]
});
config.server = defu(config.server, {
watch: {
Expand All @@ -105,17 +105,8 @@ export function proxySharedModule(
});
const watch = config.server.watch as WatchOptions
watch.ignored = [].concat(watch.ignored as any);
watch.ignored.push(`!**/node_modules/${localSharedImportMapModule.getImportId()}.js`);
watch.ignored.push(`!**${getLocalSharedImportMapPath()}**`);
},
configureServer: (server): void => {
server.watcher.options = {
...server.watcher.options,
ignored: [
new RegExp(`node_modules\/(?!${virtualPackageName}).*`),
'**/.git/**',
]
}
}
},
{
name: "prebuild-top-level-await",
Expand Down
30 changes: 30 additions & 0 deletions src/utils/localSharedImportMap_windows.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* https://github.com/module-federation/vite/issues/68
*/
import { mkdirSync, writeFileSync } from 'fs';
import path from 'pathe';
import VirtualModule from './VirtualModule';


export function getLocalSharedImportMapPath_windows(virtualModule: VirtualModule) {
return virtualModule.getPath().replace("node_modules", ".__mf__win")
}
export function writeLocalSharedImportMap_windows(virtualModule: VirtualModule, content: string) {
const localSharedImportMapId = getLocalSharedImportMapPath_windows(virtualModule)
createFile(localSharedImportMapId + ".js", "\n// Windows temporarily needs this file, https://github.com/module-federation/vite/issues/68\n" + content)
}
/**
* 创建文件,确保前面的目录存在
* @param {string} filePath - 文件的完整路径
* @param {string} content - 写入文件的内容
*/
function createFile(filePath: string, content: string) {
// 获取文件的目录路径
const dir = path.dirname(filePath);

// 递归创建目录(如果不存在的话)
mkdirSync(dir, { recursive: true });

// 创建文件并写入内容
writeFileSync(filePath, content);
}
14 changes: 7 additions & 7 deletions src/virtualModules/virtualRemoteEntry.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NormalizedModuleFederationOptions } from '../utils/normalizeModuleFederationOptions';
import VirtualModule from '../utils/VirtualModule';
import { getLocalSharedImportMapId } from './virtualShared_preBuild';
import { getLocalSharedImportMapPath } from './virtualShared_preBuild';

export const REMOTE_ENTRY_ID = 'REMOTE_ENTRY_ID';
export function generateRemoteEntry(options: NormalizedModuleFederationOptions): string {
Expand Down Expand Up @@ -32,23 +32,23 @@ export function generateRemoteEntry(options: NormalizedModuleFederationOptions):
})
.join(',')}
}
import localSharedImportMap from "${getLocalSharedImportMapId()}"
import localSharedImportMap from "${getLocalSharedImportMapPath()}"
async function init(shared = {}) {
const initRes = runtimeInit({
name: ${JSON.stringify(options.name)},
remotes: [${Object.keys(options.remotes)
.map((key) => {
const remote = options.remotes[key];
return `
.map((key) => {
const remote = options.remotes[key];
return `
{
entryGlobalName: ${JSON.stringify(remote.entryGlobalName)},
name: ${JSON.stringify(remote.name)},
type: ${JSON.stringify(remote.type)},
entry: ${JSON.stringify(remote.entry)},
}
`;
})
.join(',')}
})
.join(',')}
],
shared: localSharedImportMap,
plugins: [${pluginImportNames.map((item) => `${item[0]}()`).join(', ')}]
Expand Down
9 changes: 8 additions & 1 deletion src/virtualModules/virtualShared_preBuild.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/

import { parsePromise } from "../plugins/pluginModuleParseEnd";
import { getLocalSharedImportMapPath_windows, writeLocalSharedImportMap_windows } from "../utils/localSharedImportMap_windows";
import { getNormalizeModuleFederationOptions, ShareItem } from "../utils/normalizeModuleFederationOptions";
import { removePathFromNpmPackage } from "../utils/packageNameUtils";
import VirtualModule from "../utils/VirtualModule";
Expand All @@ -34,14 +35,20 @@ export function addShare(pkg: string) {
// *** Expose locally provided shared modules here
export const localSharedImportMapModule = new VirtualModule("localSharedImportMap")
localSharedImportMapModule.writeSync("")
export function getLocalSharedImportMapId() {
export function getLocalSharedImportMapPath() {
if (process.platform === "win32") {
return getLocalSharedImportMapPath_windows(localSharedImportMapModule)
}
return localSharedImportMapModule.getPath()
}
let prevSharedCount = 0
export async function writeLocalSharedImportMap() {
const sharedCount = shareds.size
if (prevSharedCount !== sharedCount) {
prevSharedCount = sharedCount
if (process.platform === "win32") {
return writeLocalSharedImportMap_windows(localSharedImportMapModule, await generateLocalSharedImportMap())
}
return localSharedImportMapModule.writeSync(await generateLocalSharedImportMap())
}
}
Expand Down

0 comments on commit b63c0bd

Please sign in to comment.