You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 4升级后执行php spark publish命令发布失败的解决方案咨询

CodeIgniter 4升级后执行php spark publish命令发布失败的解决方案咨询

我来帮你解决这个CodeIgniter 4发布命令报错的问题。你遇到的是CI4的Publisher组件对目标目录的文件类型限制问题——public目录默认只允许特定后缀的文件,而GroceryCrud的发布包中包含了.cjs和系统隐藏文件.DS_Store,不符合规则导致发布失败。下面是几个最优解决方案,你可以根据需求选择:

方案1:全局跳过系统隐藏文件(推荐处理.DS_Store)

.DS_Store是Mac系统自动生成的隐藏文件,完全不需要发布到项目目录。你可以通过CI4的全局配置一次性跳过这类文件,不用每个发布器单独处理:

  1. 在项目的app/Config目录下创建(如果不存在)Publisher.php文件
  2. 写入以下配置代码,添加全局跳过的文件规则:
<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Publisher extends BaseConfig
{
    // 全局跳过所有系统隐藏文件
    public $globalSkip = [
        '/\.DS_Store$/i',      // Mac系统隐藏文件
        '/Thumbs\.db$/i',      // Windows系统隐藏文件
        '/\.gitignore$/i',     // 可选:跳过Git忽略文件
    ];
}

这样所有发布器在执行时都会自动跳过这些文件,不会再因为.DS_Store报错。

方案2:自定义GroceryCrud发布器,处理.cjs文件

针对.cjs文件,你有两个选择:要么允许它发布到public目录,要么跳过它。以下是两种情况的实现:

选项A:允许.cjs文件发布到public目录

如果你需要这些.cjs文件在public目录正常工作,就扩展GroceryCrud的发布器,修改public目录的允许规则:

  1. 在app/Publishers目录下创建GroceryCrudPublisher.php文件:
<?php

namespace App\Publishers;

use GroceryCrud\Enterprise\Publishers\GroceryCrudPublisher as BasePublisher;

class GroceryCrudPublisher extends BasePublisher
{
    public function __construct()
    {
        parent::__construct();

        // 找到目标为public目录的规则,添加.cjs后缀到允许列表
        foreach ($this->paths as &$pathConfig) {
            if ($pathConfig['target'] === PUBLIC_PATH) {
                // 在原有规则基础上添加.cjs后缀
                $pathConfig['rules'] = '#\.(s?css|js|cjs|map|html?|xml|json|webmanifest|ttf|eot|woff2?|gif|jpe?g|tiff?|png|webp|bmp|ico|svg)$#i';
            }
        }
    }
}
  1. 之后执行自定义发布器的发布命令:
php spark publish App\Publishers\GroceryCrudPublisher

选项B:跳过.cjs文件(如果不需要它们)

如果你确定项目不需要这些.cjs文件,可以在自定义发布器中添加跳过规则:

修改上述app/Publishers/GroceryCrudPublisher.php的__construct方法:

public function __construct()
{
    parent::__construct();

    // 跳过所有.cjs文件
    $this->skip[] = '/\.cjs$/i';
}

然后同样执行自定义发布器的命令即可。

方案3:临时修改第三方发布器(不推荐)

你也可以直接修改vendor/grocery-crud/enterprise/Publishers/GroceryCrudPublisher.php中的规则,但不推荐这种方式——因为composer更新会覆盖你的修改,后续维护成本高。

总结

最稳妥的组合方案是:

  1. 用方案1全局跳过系统隐藏文件,一劳永逸解决.DS_Store类问题;
  2. 用方案2的A或B处理.cjs文件,根据是否需要这些文件来选择允许或跳过。

这样既解决了当前的报错,也能保证后续composer更新后配置不会丢失。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:52:58