带有Webpack的ScrollReveal-ReferenceError:未定义ScrollReveal

时间:2018-08-02 13:07:48

标签: javascript webpack referenceerror laravel-mix scrollreveal.js

Laravel 5.6.29 laravel-mix@2.1.11 webpack@3.12.0 一起使用。

通过npm i scrollreveal安装 scrollreveal@3.4.0 ,并通过require('scrollreveal')在我的 app.js 中要求它后,我在 app.js 输出,其中找到 ScrollReveal

但是,当我尝试使用window.sr = ScrollReveal();初始化它时,会抛出一个错误: ReferenceError:ScrollReveal未定义,即使引用位于定义之后。

我用两种不同的方法尝试过。首先是:

资源/资产/js/app.js

require('scrollreveal');
window.sr = ScrollReveal();

或第二种方式是

资源/视图/index.blade.php

<script type="text/javascript" src="{{ mix('/js/app.js') }}"></script>
<script type="text/javascript">
window.sr = ScrollReveal();
</script>

但是,如果我仅以传统方式包括js:

<script src="https://unpkg.com/scrollreveal/dist/scrollreveal.min.js"></script>

然后调用ScrollReveal(),它实际上可以工作。

也许这是一个范围问题?但是,为什么它只在ScrollReveal中出现而不在我使用的任何其他库中出现? NodeJS require()函数不是导入到全局范围吗?

更新:我发现解决此问题的第三种方法是更改​​ resources / assets / js / app.js 并添加:

import ScrollReveal from 'scrollreveal';
window.sr = ScrollReveal();

将解决此问题,因为这将使用ES6导入(显然)将 window.sr 定义为 ScrollReveal()

但是,为什么NodeJS仍然不需要工作?

1 个答案:

答案 0 :(得分:0)

以某种方式使它起作用,我尚不知道为什么它起作用(如果您知道,请详细说明!),但是它起作用。

更改 resources / assets / js / app.js 并添加:

require('scrollreveal')().reveal('.sreveal');

使用NodeJS require()解决此问题。