通过npm在WordPress中安装mmenu.js时遇类型错误求助
在WordPress中手动集成mmenu.js(非官方插件),已完成npm环境配置、包下载、package.json/gulpfile更新,编译后的样式和脚本已通过wp_enqueue_script正确引入,测试页面仅保留wp_head()和wp_footer()加载资源,但控制台抛出以下错误:
Uncaught TypeError: o is not a function at e.backButton (mmenu.js:2:27071) at e.value (mmenu.js:2:6157) at new e (mmenu.js:2:3093) at HTMLDocument.<anonymous> (mmenu-test/:228:34)
核心排查方向及解决方法
1. 确认jQuery依赖的正确性
mmenu.js强依赖jQuery,WordPress环境下容易出现加载顺序或兼容问题:
- 强制依赖加载:在
wp_enqueue_script中明确将jquery设为mmenu脚本的依赖,确保jQuery先于mmenu加载:function enqueue_mmenu_assets() { wp_enqueue_style( 'mmenu-styles', get_template_directory_uri() . '/assets/styles/styles.css', array(), '1.0.0' ); // 第三个参数指定依赖为jquery wp_enqueue_script( 'mmenu-scripts', get_template_directory_uri() . '/assets/scripts/scripts.js', array('jquery'), '1.0.0', true ); } add_action( 'wp_enqueue_scripts', 'enqueue_mmenu_assets' ); - 检查jQuery版本兼容性:mmenu v9+要求jQuery 3.0及以上,若WordPress自带的jQuery版本过低(如2.x),需升级jQuery或降级mmenu到兼容版本。
- 适配noConflict模式:WordPress默认加载的jQuery处于noConflict模式,不能直接使用
$,需在初始化代码中用jQuery或通过回调参数传递$:jQuery(document).ready(function($) { // 此处可安全使用$代替jQuery $("#my-menu").mmenu(); });
2. 修正mmenu初始化代码
错误指向backButton方法,大概率是初始化配置或时机问题:
- 确保DOM加载完成后初始化:必须将mmenu初始化代码包裹在
$(document).ready()或原生DOMContentLoaded事件中,避免DOM元素未渲染就执行初始化。 - 验证菜单选择器有效性:检查初始化时的选择器(如
$("#my-menu"))对应的DOM元素是否存在,可通过console.log($("#my-menu").length)确认,若返回0则需修正选择器。 - 检查backButton配置:若启用了backButton选项,确保未传递非函数类型的参数,比如错误写法:
正确写法(若需自定义回调):// 错误示例:backButton的close选项传递了非函数值 $("#my-menu").mmenu({ backButton: { close: 'wrong-value' } });$("#my-menu").mmenu({ backButton: { enable: true, close: function() { // 自定义逻辑 } } });
3. 排查打包编译问题
gulp打包过程可能破坏mmenu的内部代码:
- 测试未压缩的原始mmenu.js:暂时替换编译后的
scripts.js为官方下载的未压缩版mmenu.js,若错误消失,说明是打包时的压缩/混淆规则导致变量损坏,需调整gulp配置(如禁用过度的tree-shaking或修改压缩插件参数)。 - 检查打包入口:确认mmenu在打包时被完整引入,未被误判为无用代码剔除。
4. 验证mmenu版本
尝试切换mmenu的版本,比如从最新版降级到稳定版,排除特定版本的bug导致的错误。
内容的提问来源于stack exchange,提问作者lenrooney
相关产品推荐
相关产品推荐

