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

在WordPress中使用Hotwire Turbo遇Turbo未定义错误求解决

解决WordPress中Hotwire Turbo "Turbo is not defined" 错误

问题原因

你引入的是Turbo的ES模块版本,ES模块的变量默认不会暴露到全局作用域,而你的application.js是直接在全局环境中访问Turbo变量,因此触发未定义错误。

解决方案

提供三种可行的解决方式:

方法1:将application.js改为模块类型

如果application.js通过WordPress加载,先修改它的脚本标签为type="module",然后在application.js中显式导入Turbo:

import * as Turbo from 'https://unpkg.com/@hotwired/turbo@7.3.0/dist/turbo.es2017-esm.js';
// 正常使用Turbo,例如初始化
Turbo.start();

同时在WordPress中给application.js的脚本标签添加模块属性,复用你现有的过滤器函数:

function set_scripts_type_attribute( $tag, $handle, $src ) {
    // 替换'application-js'为你实际注册application.js时用的handle
    if ( 'Turbo' === $handle || 'application-js' === $handle ) {
        $tag = '<script type="module" src="'. esc_url($src) .'"></script>';
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'set_scripts_type_attribute', 10, 3 );

方法2:手动将Turbo暴露到全局

创建一个中间模块脚本(比如turbo-global.js),在其中导入Turbo并挂载到window对象:

import * as Turbo from 'https://unpkg.com/@hotwired/turbo@7.3.0/dist/turbo.es2017-esm.js';
window.Turbo = Turbo;
Turbo.start();

在WordPress中引入这个脚本并设置为模块类型:

wp_enqueue_script('Turbo-Global', get_template_directory_uri() . '/js/turbo-global.js', array(), '7.3.0', false);

这样application.js就能在全局作用域访问到Turbo变量。

方法3:改用Turbo的UMD版本

如果不想处理ES模块的复杂逻辑,可以直接引入Turbo的UMD版本,它会自动将Turbo暴露为全局变量。修改你的wp_enqueue_script代码:

wp_enqueue_script('Turbo', 'https://unpkg.com/@hotwired/turbo@7.3.0/dist/turbo.min.js', array(), '7.3.0', false);

同时可以删除之前设置type="module"的过滤器函数,UMD版本不需要模块类型,加载完成后Turbo即可直接使用。

注意事项

  • 使用方法1时,确保所有依赖模块的脚本都采用模块类型,避免混合加载导致顺序问题。
  • 方法3的UMD版本兼容性更强,适合快速解决问题的场景。

内容的提问来源于stack exchange,提问作者rctneil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:14