【发布时间】:2022-02-10 03:48:51
【问题描述】:
我管理一个在主页上使用 Three.js 动画的 WordPress 网站。我几个月前建立了这个网站,一切都运行得非常好——我什至在一周前把它展示给了某人,没有任何问题。昨天,我检查了网站,发现 3 没有加载,并且我在控制台中有这个:
未捕获的类型错误:无法解析模块说明符“三”。相对引用必须以“/”、“./”或“../”开头。
我没有要引用的行甚至文件,错误记录来自根域的第一行。我想强调的是,我完全没有改变设置。我什至还没有更新到 WP 5.9。这就是我最初设置的方式。抱歉,如果这不是最佳实践,但我想强调它实际上工作正常。 将动画javascript文件排队并将其类型定义为“模块”:
function my_custom_scripts() {
wp_enqueue_script( 'gsap', 'https://cdnjs.cloudflare.com/ajax/libs/gsap/3.7.0/gsap.min.js', array( 'jquery' ), '', true);
wp_enqueue_script( 'scrolltrigger', 'https://cdnjs.cloudflare.com/ajax/libs/gsap/3.7.0/ScrollTrigger.min.js', array( 'gsap' ), '', true);
wp_enqueue_script( 'custom-animations', get_stylesheet_directory_uri() . '/js/animations.js', array( 'gsap' ),'',true );
}
add_action( 'wp_enqueue_scripts', 'my_custom_scripts', 15);
add_filter('script_loader_tag','add_type_to_script', 10, 3);
function add_type_to_script($tag, $handle, $source){
if ('custom-animations' === $handle) {
$tag = '<script type="module" src="'. $source .'"></script>';
}
return $tag;
}
“animations.js”的第一行:
import * as THREE from 'https://cdn.skypack.dev/three@0.137.5/build/three.module.js';
import { GLTFLoader } from "https://threejs.org/examples/jsm/loaders/GLTFLoader.js";
import { DRACOLoader } from 'https://threejs.org/examples/jsm/loaders/DRACOLoader.js';
如果有其他相关代码解决这个问题,请告诉我,但我一直在倾注并尝试 A)下载模块文件并将其放在我自己的服务器上并提供相对路径,同一个控制台出现问题(尽管如果链接无效,它确实会抱怨 404,表明它确实遵循了它)。 B)下载three.min.js文件并在此之前加载它,完全删除模块调用,我仍然得到相同的控制台错误(即使它甚至没有作为模块导入)。该站点已托管在 Cloudflare 上,因此我确实先禁用了它。清除缓存没有任何改变,我在每一步都确认我没有加载缓存版本。在 Chrome 开发工具的网络选项卡中,模块/文件被加载到缓存中就好了。在此过程中,某些文件(我希望控制台会指定,也许这表明问题)未能将“三”作为模块附加,我不知道为什么。任何帮助将不胜感激!
【问题讨论】:
-
哦,我应该提一下,我还尝试将三个文件与其他文件一起排队,但仍然收到“模块说明符”错误:function my_custom_scripts() { wp_enqueue_script( 'three', get_stylesheet_directory_uri() 。 '/js/three.min.js', array('jquery'),'',true);
-
我有同样的问题,没有改变任何东西,并得到同样的错误。你在这个问题上有什么进展吗?
-
如下所述的导入映射有效。我不确定为什么它不适用于 Skypack CDN,但这是另一个问题 - 现在通过地图导入的 three.module.js 的本地副本可以解决问题。
标签: javascript wordpress module three.js