Opencart 3.0.3.7提示JSMin类名已存在报错该如何解决
错误原因
这个报错是因为你的Opencart 3.0.3.7环境中已经存在JSMin类的定义(系统默认自带的JSMin类通常位于system/library/jsmin.php路径下),你当前使用的第三方主题/扩展又重复引入了同名类的定义,导致命名冲突。
可直接使用的修复方案
- 方案1:类存在判断(无需修改原有调用逻辑,最便捷)
在你提供的这段类定义代码的最外层添加类存在判断,仅当系统没有加载过JSMin类时才定义该类,修改后的完整代码如下:
// 仅当JSMin类未定义时才加载 if (!class_exists('JSMin')) { class JSMin { const ORD_LF = 10; const ORD_SPACE = 32; const ACTION_KEEP_A = 1; const ACTION_DELETE_A = 2; const ACTION_DELETE_A_B = 3; protected $a = ''; protected $b = ''; protected $input = ''; protected $inputIndex = 0; protected $inputLength = 0; protected $lookAhead = null; protected $output = ''; // -- Public Static Methods -------------------------------------------------- /** * Minify Javascript * * @uses __construct() * @uses min() * @param string $js Javascript to be minified * @return string */ public static function minify($js) { $jsmin = new JSMin($js); return $jsmin->min(); } // 原有剩余的类方法代码保持不变 } }
- 方案2:修改自定义类名(避免后续冲突,适合需要自定义
JSMin逻辑的场景)
将自定义的JSMin类改名,同时同步修改类内部的实例化调用:
// 给类加自定义前缀避免冲突 class Custom_JSMin { const ORD_LF = 10; const ORD_SPACE = 32; const ACTION_KEEP_A = 1; const ACTION_DELETE_A = 2; const ACTION_DELETE_A_B = 3; protected $a = ''; protected $b = ''; protected $input = ''; protected $inputIndex = 0; protected $inputLength = 0; protected $lookAhead = null; protected $output = ''; // -- Public Static Methods -------------------------------------------------- /** * Minify Javascript * * @uses __construct() * @uses min() * @param string $js Javascript to be minified * @return string */ public static function minify($js) { // 实例化时使用新的类名 $jsmin = new Custom_JSMin($js); return $jsmin->min(); } // 原有剩余的类方法代码保持不变 }
修改完成后,同步将所有调用这个类的代码里的JSMin::minify()替换为Custom_JSMin::minify()即可。
- 方案3:统一复用系统自带的JSMin类
直接删除你自定义的JSMin类文件,所有需要用到JS压缩能力的位置统一调用Opencart自带的JSMin类即可,调用方法和原有逻辑完全一致:
// 引入系统自带的JSMin类 require_once DIR_SYSTEM . 'library/jsmin.php'; // 调用方法不变 $compressedJs = JSMin::minify($jsContent);
内容的提问来源于stack exchange,提问作者Erdem Sicak
相关产品推荐
相关产品推荐

