安装TYPO3扩展时提示“扩展不可用”问题求助(Composer开发)
TYPO3 9.5自定义扩展安装错误:“Extension myExtensionName is not available” 解决指南
问题描述
我是TYPO3新手,已成功安装TYPO3 9.5版本。尝试开发自定义扩展时,先后使用TYPO3 Kickstart和sitepackagebuilder.com生成扩展,但安装时持续提示“Extension myExtensionName is not available”。扩展存放于typo3conf/ext/目录下,希望通过Composer开发扩展。
附原配置文件:
原ext_emconf.php
<?php $EM_CONF[$_EXTKEY] = [ 'title' => 'My extension', 'description' => 'Typo3 Command for Scheduler', 'category' => 'plugin', "uploadfolder" => 0, "clearcacheonload" => true, 'author_email' => '', 'state' => 'alpha', 'createDirs' => '', 'clearCacheOnLoad' => 1, 'version' => '1.0.0', 'autoload' => [ 'psr-4' => [ "Foo\Bar\": "Classes/" ] ], 'constraints' => [ 'depends' => [ 'typo3' => '9.5.0-9.5.99', ], 'conflicts' => [], 'suggests' => [], ], ];
原composer.json
{ "name": "foo/my_extension", "description": "Typo3 Command for Scheduler", "type": "typo3-cms-extension", "version": "9.5.0", "prefer-stable": true, "keywords": [ "TYPO3", "CMS", "Extension" ], "homepage": "https://example.com", "license": "MIT", "authors": [ { "name": "example", "email": "test@example.com" } ], "require": { "php": ">=7.2.0", "typo3/cms-core": "^9.5 || 10.2.0 - 10.4.99", "typo3/cms-backend": "~8.7.10 || ~9.5.0", "typo3/cms-extbase": "~8.7.10 || ~9.5.0", "typo3/cms-scheduler": "~8.7.10 || ~9.5.0" }, "autoload": { "psr-4": { "Foo\Bar\": "Classes/" } }, "replace": { "foo/my_extension": "self.version" } }
解决步骤
1. 确保扩展目录与配置一致
typo3conf/ext/下的扩展目录名必须和composer.json中name字段的后半部分一致(比如foo/my_extension对应目录名my_extension),同时匹配ext_emconf.php中的$_EXTKEY(即目录名)。- 检查
composer.json的replace字段键名,必须和扩展包名完全一致。
2. 修复配置文件语法错误
ext_emconf.php修正点:
- PSR-4命名空间反斜杠需转义:
"Foo\Bar\"改为'Foo\\Bar\\' - 删除重复的
clearCacheOnLoad字段,保留'clearcacheonload' => true即可
composer.json修正点:
- PSR-4命名空间反斜杠转义:
"Foo\Bar\"改为"Foo\\Bar\\" replace字段中self.version改为${self.version},否则Composer无法识别版本变量- 统一版本号:将
version改为1.0.0,与ext_emconf.php保持一致 - 简化依赖约束:针对TYPO3 9.5,移除8.7版本兼容,精简
require字段
3. 用Composer加载本地扩展
在TYPO3根目录的composer.json中添加本地扩展仓库:
"repositories": [ { "type": "path", "url": "typo3conf/ext/my_extension" } ]
执行命令安装扩展:
composer require foo/my_extension:@dev
4. 清除缓存并重新扫描扩展
执行缓存清除命令:
./vendor/bin/typo3 cache:flush
进入后台扩展管理模块,点击“重新扫描可用扩展”按钮。
5. 检查文件权限
确保扩展目录及文件的权限正确,Web服务器用户(如www-data)拥有读取权限。
修正后的配置文件示例
修正后的ext_emconf.php
<?php $EM_CONF[$_EXTKEY] = [ 'title' => 'My extension', 'description' => 'Typo3 Command for Scheduler', 'category' => 'plugin', 'uploadfolder' => 0, 'clearcacheonload' => true, 'author_email' => '', 'state' => 'alpha', 'createDirs' => '', 'version' => '1.0.0', 'autoload' => [ 'psr-4' => [ 'Foo\\Bar\\' => 'Classes/' ] ], 'constraints' => [ 'depends' => [ 'typo3' => '9.5.0-9.5.99', ], 'conflicts' => [], 'suggests' => [], ], ];
修正后的composer.json
{ "name": "foo/my_extension", "description": "Typo3 Command for Scheduler", "type": "typo3-cms-extension", "version": "1.0.0", "prefer-stable": true, "keywords": [ "TYPO3", "CMS", "Extension" ], "homepage": "https://example.com", "license": "MIT", "authors": [ { "name": "example", "email": "test@example.com" } ], "require": { "php": ">=7.2.0", "typo3/cms-core": "^9.5", "typo3/cms-backend": "^9.5", "typo3/cms-extbase": "^9.5", "typo3/cms-scheduler": "^9.5" }, "autoload": { "psr-4": { "Foo\\Bar\\": "Classes/" } }, "replace": { "foo/my_extension": "${self.version}" } }
内容的提问来源于stack exchange,提问作者user22271387
相关产品推荐
相关产品推荐

