绝大多数情况下不该直接运行 composer require;Statamic v4 将核心与插件解耦,根目录执行会导致降级、冲突及后台失灵,应于 site/addons/ 下操作或使用 statamic addons:install。

Statamic 项目里该不该直接运行 composer require
绝大多数情况下——不该。Statamic(尤其是 v4)已将核心与插件解耦,composer.json 不再是“项目依赖清单”,而是“构建时依赖清单”。直接在项目根目录执行 composer require 可能导致:statamic/statamic 被降级、vendor 冲突、后台插件管理器失灵。
真正该操作的位置是 site/addons/ 下的独立插件目录,或者使用 Statamic 官方推荐的插件分发机制。
- 插件必须以 Composer 包形式发布(含
composer.json),且类型为statamic-addon - 本地开发插件时,在
site/addons/my-addon/中运行composer install,而非项目根目录 - 生产环境部署插件,应通过
statamic addons:install vendor/package-name命令(v4.5+),它会自动处理 autoload 和注册
statamic addons:install 报错 “Package not found” 怎么办
这个错误不是 Composer 找不到包,而是 Statamic 的插件注册器没在 composer.lock 或已知源中识别到该包。常见原因有三个:
- 包未声明
"type": "statamic-addon"—— 即使composer require成功,Statamic 也会跳过加载 - 包名不规范:必须是
vendor/name格式,且name部分不能含下划线(my_addon❌ →my-addon✅) - 本地路径包未启用仓库模式:若用
path仓库引入本地插件,需在根composer.json中显式添加"repositories"并设"packagist.org": false,否则 v4.4+ 会忽略
验证方式:运行 composer show vendor/package-name,确认输出中有 type : statamic-addon 字样。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 composer update 会让 Statamic 后台变白屏
因为 Statamic v4 的前端资源(JS/CSS)由 Laravel Mix 构建,而构建脚本依赖 statamic/cli 和特定版本的 laravel-mix。一旦 composer update 升级了这些工具或其依赖(比如 webpack、postcss),构建就可能失败,但错误不会立刻暴露在浏览器里——只留一个空 <div id="app"></div>。
- 永远不要在生产环境直接运行
composer update;更新前先检查statamic/cli的 GitHub Releases 是否标注了兼容的 Mix 版本 - 本地开发时,如遇白屏,先运行
php please build:assets,观察终端是否报Module not found或Cannot resolve 'xxx' - 临时修复可删掉
resources/js/app.js里的动态导入(如import('./bootstrap')),改用静态require('./bootstrap'),避开 Webpack 5 的模块解析陷阱
自定义插件里怎么安全调用 Composer\Autoload\ClassLoader
极少需要手动操作自动加载器。Statamic 插件默认走 PSR-4,只要在 composer.json 里正确配置 "autoload",安装后就会自动注册。强行干预 ClassLoader 容易破坏插件隔离性,尤其当多个插件都修改同一实例时。
- 如果真要扩展命名空间(比如加载第三方 SDK),应在插件的
ServiceProvider::boot()中调用$this->app->register(MySdkServiceProvider::class),而不是直接操作ClassLoader - 调试加载问题时,用
composer dump-autoload -o比手写addClassMap更可靠 - 注意:Statamic v4.3+ 禁用了
ClassLoader::addPsr4()对Statamic\命名空间的覆盖,试图这么做会触发LogicException
最常被忽略的一点:插件的 autoload 配置必须和实际文件结构严格一致,连大小写都不能错——Mac 上可能不报错,Linux 部署后直接 Class not found。

















