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

在搭载webpacker的Rails 6项目中如何正确使用wow.js?

错误原因

该报错由ES模块的作用域隔离特性导致:每个JS模块都有独立作用域,你在application.js中导入的WOW变量仅在当前文件内有效,不会自动暴露给后续导入的scripts.js,因此scripts.js调用new WOW()时会触发变量未定义错误。

符合Rails规范的实现方案

方案1:直接在application.js完成初始化(最推荐)

无需拆分独立的初始化文件,直接把WOW初始化逻辑写在导入语句之后即可:

// app/javascript/packs/application.js
import WOW from 'wowjs';
require("wowjs/css/libs/animate.css")

// 直接初始化
const wow = new WOW({
  animateClass: 'animated',
  offset: 100
});
wow.init();

// 其他业务逻辑导入放在后面即可

方案2:需要拆分独立初始化文件的场景

如果确实要把WOW初始化逻辑拆分到单独文件,可选以下两种实现:

方式A:给初始化文件单独导入依赖

修改app/javascript/scripts.js(注意文件名和导入语句保持一致),在顶部先导入WOW:

// app/javascript/scripts.js
import WOW from 'wowjs';

const wow = new WOW({
  animateClass: 'animated',
  offset: 100
});
wow.init();

此时application.js无需单独导入WOW,直接引入初始化文件即可:

// app/javascript/packs/application.js
import "scripts.js"

方式B:挂载到全局作用域(适配老旧代码)

如果你的scripts.js存在其他依赖全局变量的历史代码,可以选择把WOW暴露到全局window对象:

// app/javascript/packs/application.js
import WOW from 'wowjs';
window.WOW = WOW; // 挂载到全局后所有模块都可访问
require("wowjs/css/libs/animate.css")
import "scripts.js"

常见坑提示

你描述中提到初始化代码存放在app/javascript/script.js,但导入时写的是import "scripts.js",请检查文件名拼写是否一致,多出来的s也会导致模块加载失败,触发同类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 07:54:00