verify-shell-package.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * 启动前校验:@fskj-admin/shell 必须来自私有 npm 且版本满足 package.json 声明的范围。
  3. * 不做本地 platform-shell 兜底,缺包/版本不对时直接失败,便于团队暴露框架问题。
  4. */
  5. import fs from 'node:fs'
  6. import path from 'node:path'
  7. import { satisfies as semverSatisfies } from 'semver'
  8. const root = process.cwd()
  9. const pkgJson = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'))
  10. const requiredSpec = pkgJson.dependencies?.['@fskj-admin/shell']
  11. if (!requiredSpec) {
  12. console.error('[verify-shell] package.json 未声明 @fskj-admin/shell 依赖')
  13. process.exit(1)
  14. }
  15. const shellPkgPath = path.join(root, 'node_modules/@fskj-admin/shell/package.json')
  16. if (!fs.existsSync(shellPkgPath)) {
  17. console.error(
  18. '[verify-shell] 未安装 @fskj-admin/shell。请配置私有 npm 源后执行 pnpm install'
  19. )
  20. process.exit(1)
  21. }
  22. const installedVersion = JSON.parse(fs.readFileSync(shellPkgPath, 'utf8')).version
  23. if (!semverSatisfies(installedVersion, requiredSpec, { includePrerelease: true })) {
  24. console.error(
  25. `[verify-shell] @fskj-admin/shell 版本不满足:package.json 要求 ${requiredSpec},node_modules 为 ${installedVersion}。请执行 pnpm install`
  26. )
  27. process.exit(1)
  28. }
  29. const criticalFiles = [
  30. 'src/constants/systemApplication.ts',
  31. 'src/stores/user.ts',
  32. 'src/components/core/GlobalHeader.vue'
  33. ]
  34. for (const rel of criticalFiles) {
  35. const abs = path.join(root, 'node_modules/@fskj-admin/shell', rel)
  36. if (!fs.existsSync(abs)) {
  37. console.error(
  38. `[verify-shell] @fskj-admin/shell@${installedVersion} 包不完整,缺少 ${rel}。请检查私有仓库发布或重新 install`
  39. )
  40. process.exit(1)
  41. }
  42. }
  43. console.log(`[verify-shell] @fskj-admin/shell@${installedVersion} OK (satisfies ${requiredSpec})`)