소스 검색

refactor(core): 移除废弃的扩展名列表逻辑

- 删除 `AutoloadService` 中不再使用的 `$extensionNameList` 参数
- 移除 `CoreService` 中的 `$extensionNameList` 和 `$normalExtensionNameList` 静态属性
- 清理 `CoreService` 中与旧版扩展加载兼容性相关的代码
- 更新 `extension_name_list()` 函数以直接从 composer 映射获取扩展名
- 在读取 composer.json 时增加异常处理并记录错误日志
- 简化扩展自动加载流程,仅依赖 composer 包管理机制
runphp 3 달 전
부모
커밋
f3982aee73
3개의 변경된 파일11개의 추가작업 그리고 53개의 파일을 삭제
  1. 1 18
      src/Service/AutoloadService.php
  2. 9 34
      src/Service/CoreService.php
  3. 1 1
      src/functions.php

+ 1 - 18
src/Service/AutoloadService.php

@@ -14,7 +14,7 @@ readonly class AutoloadService
     {
     }
 
-    public function load(array $extensionComposerMap, array $extensionNameList): array
+    public function load(array $extensionComposerMap): array
     {
         $invalidExtensionIDs = [];
         foreach ($extensionComposerMap as $extensionID => $composerFile) {
@@ -24,24 +24,7 @@ readonly class AutoloadService
             }
             $this->app->bind('extension.' . $extensionID, $composerFile['extra']['sixshop']['class']);
         }
-        $extensionPath = extension_path();
         $classLoader = $this->app->get('classLoader');
-        foreach ($extensionNameList as $moduleName) {
-            $dir = $extensionPath . $moduleName;
-            if (!file_exists($dir . '/composer.json')) {
-                $namespace = "SixShop\\Extension\\$moduleName\\";
-                $path = $dir . '/src';
-                if (!isset($classLoader->getPrefixesPsr4()[$namespace])) {
-                    $classLoader->addPsr4($namespace, $path);
-                    $helperFunctionFile = $dir . "/src/helper.php";
-                    if (is_file($helperFunctionFile)) {
-                        require_once $helperFunctionFile;
-                    }
-                }
-                $extensionClass = $namespace . 'Extension';
-                $this->app->bind('extension.' . $moduleName, $extensionClass);
-            }
-        }
         return $invalidExtensionIDs;
     }
 

+ 9 - 34
src/Service/CoreService.php

@@ -12,23 +12,17 @@ use SixShop\Core\Plugin;
 use SixShop\Core\Request;
 use think\event\HttpRun;
 use think\exception\Handle;
+use think\facade\Log;
 use think\Service;
 use function SixShop\Core\extension_path;
 
 class CoreService extends Service
 {
-    public static string $extensionPath;
-
     /**
      * @var array<string, array{name:string,version:string}>
      */
     public static array $extensionComposerMap = [];
 
-    /* @deprecated */
-    public static array $extensionNameList = [];
-
-    private static array $normalExtensionNameList = [];
-
     public static function getExtensionComposerMap(): array
     {
         return self::$extensionComposerMap;
@@ -43,9 +37,7 @@ class CoreService extends Service
         $this->app->bind('think\Request', Request::class);
         $this->app->bind('classLoader',
             require $this->app->getRootPath() . 'vendor/autoload.php');
-        self::$extensionPath = $this->app->getRootPath() . 'extension' . DIRECTORY_SEPARATOR;
         $this->initExtensionList();
-        $this->compatibleExtensionNameList();
     }
 
     /**
@@ -71,7 +63,12 @@ class CoreService extends Service
         }
         foreach (InstalledVersions::getInstalledPackagesByType(Plugin::EXTENSION_TYPE) as $item) {
             $installPath = InstalledVersions::getInstallPath($item);
-            $composerJson = new JsonFile($installPath . '/composer.json');
+            try {
+                $composerJson = new JsonFile($installPath . '/composer.json');
+            } catch (\RuntimeException $e) {
+                Log::error($e->getMessage());
+                continue;
+            }
             $composer = $composerJson->read();
             $extensionID = $composer['extra']['sixshop']['id'] ?? $composer['name'];
             self::$extensionComposerMap[$extensionID] = $composer;
@@ -81,37 +78,15 @@ class CoreService extends Service
         file_put_contents($extensionComposerFile, $content);
     }
 
-    /* @deprecated */
-    private function compatibleExtensionNameList(): void
-    {
-        if (empty(self::$extensionNameList)) {
-            self::$extensionNameList = array_keys(self::$extensionComposerMap);
-            $normalFile = $this->app->getRootPath() . 'runtime/module_name_list_normal.php';
-            if (file_exists($normalFile)) {
-                $normalExtensionList = require $normalFile;
-                foreach ($normalExtensionList as $item) {
-                    if (array_key_exists($item, self::$extensionComposerMap)) {
-                        continue;
-                    }
-                    if (is_dir(extension_path($item) . 'src')) {
-                        self::$extensionNameList[] = $item;
-                        self::$normalExtensionNameList[] = $item;
-                    }
-                }
-            }
-        }
-    }
-
     /**
      * @throws ReflectionException
      */
     public function boot(): void
     {
         $autoloadService = $this->app->make(AutoloadService::class);
-        $invalidExtensionIDs = $autoloadService->load(self::$extensionComposerMap, self::$normalExtensionNameList);
-        self::$extensionNameList = array_diff(self::$extensionNameList, $invalidExtensionIDs);
+        $invalidExtensionIDs = $autoloadService->load(self::$extensionComposerMap);
         $this->app->get('extension.system')->boot();
-        foreach (self::$extensionComposerMap + self::$normalExtensionNameList as $moduleName => $_) {
+        foreach (self::$extensionComposerMap as $moduleName => $_) {
             if (in_array($moduleName, $invalidExtensionIDs)) {
                 continue;
             }

+ 1 - 1
src/functions.php

@@ -183,7 +183,7 @@ function extension_path(string $extensionID = ''): string
  */
 function extension_name_list(): array
 {
-    return CoreService::$extensionNameList;
+    return array_keys(CoreService::$extensionComposerMap);
 }