问题描述
我正在尝试在我的 Ruby on Rails 6.1.3.2 项目中使用 wow.js。我已经用 Yarn 安装了 wowjs,我在 node_modules 文件夹中看到了它。
我已将 wowjs 导入到我的应用程序 app/javascript/packs/application.js
import WOW from 'wowjs';
require("wowjs/css/libs/animate.css")
我有一个位于此路径的 script.js 文件:app/javascript/script.js 并启动 WOW
wow = new WOW({
animateClass: 'animated',offset: 100
});
wow.init();
script.js 导入到 app/javascript/packs/application.rb 后 wowjs 是这样导入的:
import WOW from 'wowjs';
require("wowjs/css/libs/animate.css")
import "scripts.js"
我一直在控制台中收到以下错误:
scripts.js:514 Uncaught ReferenceError: WOW is not defined
at Object.<anonymous> (scripts.js:514)
at Object../app/javascript/scripts.js (scripts.js:897)
at __webpack_require__ (bootstrap:63)
at Module../app/javascript/packs/application.js (application.js:1)
at __webpack_require__ (bootstrap:63)
at bootstrap:198
at bootstrap:198
我以类似的方式安装了其他模块,这些模块不会引发错误。我想了解这样做的“轨道方式”是什么。预先感谢您的帮助。
解决方法
通过yarn安装jquery、wowjs,在app/javascript/packs/application.js
中添加这一行:
window.WOW = require('wowjs').WOW;
通过添加到 app/assets/stylesheets/application.scss
这一行将 wow css 嵌入到项目中:
@import "wowjs/css/libs/animate";
并通过创建此视图示例 app/views/pages/home.html.erb
完成:
Welcome to project railstrace !
<section class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="5s">ABC</section>
<section class="wow slideInRight" data-wow-offset="10" data-wow-iteration="10">DEF</section>
<script>
new WOW({live: false}).init()
</script>
注意:如果设置 new WOW({live: false}).init()
将删除此警告:您的浏览器不支持 MutationObserver。
享受吧!
,这个问题的答案最终如下:
将 import 语句从 application.js 移动到正在使用模块的 scripts.js:
import "splitting/dist/splitting.css";
import "splitting/dist/splitting-cells.css";
import Splitting from "splitting";
我错过了“哇”作为“var”的声明。所以我像这样在 script.js 中添加了“var”:
var wow = new WOW({
animateClass: 'animated',offset: 100
});
wow.init();
对我来说的关键教训是导入语句需要位于使用模块的脚本的顶部。我曾假设仅仅凭借将它们导入 application.js 就足以使它们可用于所有脚本。也许这是一个新手课程。非常感谢@rossta 的一些重要指导。我期待着他即将到来的 Webpacker 课程。