/** * 业务项目仅使用私有 npm 中的 @fskj-admin/shell,禁止回退到本机 platform-shell 源码路径。 * 框架源码仓库:/Users/qiyuan/workspace_front/front-platform-core_3.0.1-Beta(packages/platform-shell)。 * * 登录/首页/defaultSetting 等留在本仓 src/,其余平台能力走 npm shell。 */ import path from 'node:path' import { createEmptyProjectShellAliases, type CreateEmptyProjectShellAliasesOptions } from '@fskj-admin/shell/vite' export function createProjectShellAliases(options: CreateEmptyProjectShellAliasesOptions = {}) { const root = options.projectRoot ?? process.cwd() const src = path.join(root, 'src') const npmShellSrc = path.join(root, 'node_modules/@fskj-admin/shell/src') /** 强制 setAppRouter / getAppRouter 走同一物理文件,避免子路径与 barrel 双实例 */ const appRouterHolder = path.join(npmShellSrc, 'router/appRouterHolder.ts') const createAppRouterModule = path.join(npmShellSrc, 'router/createAppRouter.ts') const businessRouterExtension = path.join(npmShellSrc, 'router/businessRouterExtension.ts') const homeExtension = path.join(npmShellSrc, 'home/homeExtension.ts') const createAdminAppModule = path.join(npmShellSrc, 'bootstrap/createAdminApp.ts') const platformOpsRouterExtension = path.join(npmShellSrc, 'router/platformOpsRouterExtension.ts') const platformOpsRegister = path.join(npmShellSrc, 'platformops/register.ts') const platformOpsEssentialRoutes = path.join(npmShellSrc, 'platformops/essentialRoutes.ts') const base = createEmptyProjectShellAliases({ localShellCandidates: false, ...options }) /** 商户登录/注册等业务页须在通用 @shell alias 之前匹配 */ const merchantOverrides = [ { find: '@shell/router/appRouterHolder', replacement: appRouterHolder }, { find: '@fskj-admin/shell/router/appRouterHolder', replacement: appRouterHolder }, { find: '@shell/router/createAppRouter', replacement: createAppRouterModule }, { find: '@fskj-admin/shell/router/createAppRouter', replacement: createAppRouterModule }, { find: '@shell/router/businessRouterExtension', replacement: businessRouterExtension }, { find: '@fskj-admin/shell/router/businessRouterExtension', replacement: businessRouterExtension }, { find: '@shell/home/homeExtension', replacement: homeExtension }, { find: '@fskj-admin/shell/home/homeExtension', replacement: homeExtension }, { find: '@shell/bootstrap/createAdminApp', replacement: createAdminAppModule }, { find: '@fskj-admin/shell/bootstrap/createAdminApp', replacement: createAdminAppModule }, { find: '@shell/router/platformOpsRouterExtension', replacement: platformOpsRouterExtension }, { find: '@fskj-admin/shell/router/platformOpsRouterExtension', replacement: platformOpsRouterExtension }, { find: '@shell/platformops/register', replacement: platformOpsRegister }, { find: '@fskj-admin/shell/platformops/register', replacement: platformOpsRegister }, { find: '@shell/platformops/essentialRoutes', replacement: platformOpsEssentialRoutes }, { find: '@fskj-admin/shell/platformops/essentialRoutes', replacement: platformOpsEssentialRoutes }, { find: '@shell/views/user/MerchantLogin.vue', replacement: path.join(src, 'views/user/MerchantLogin.vue') }, { find: '@shell/views/user/MerchantRegister.vue', replacement: path.join(src, 'views/user/MerchantRegister.vue') }, { find: '@shell/views/miniprogram/HomeQuickGrid.vue', replacement: path.join(src, 'business/views/miniprogram/HomeQuickGrid.vue') }, { find: '@/api/setting/homeQuickGrid', replacement: path.join(src, 'business/api/setting/homeQuickGrid.ts') }, { find: path.join(npmShellSrc, 'api/setting/homeQuickGrid.ts'), replacement: path.join(src, 'business/api/setting/homeQuickGrid.ts') }, { find: '@/utils/bizSceneExt', replacement: path.join(src, 'utils/bizSceneExt.ts') }, { find: '@/components/layout/GlobalMainNav.vue', replacement: path.join(src, 'components/layout/GlobalMainNav.vue') }, { find: '@/utils/formatMainNavLabel', replacement: path.join(src, 'utils/formatMainNavLabel.ts') } ] return [...merchantOverrides, ...base] } /** 组件扫描目录:强制 npm 包,不探测 TravelWebFront 等本地 platform-shell */ export function resolveProjectShellComponentsDir(projectRoot?: string) { const root = projectRoot ?? process.cwd() return path.join(root, 'node_modules/@fskj-admin/shell/src/components') } export type { CreateEmptyProjectShellAliasesOptions as CreateShellAliasesOptions }