我尝试将instantclick集成到我的rails 6应用程序中。我在javascript / custom文件夹中添加了instantclick.js file。然后,将其导入javascript / packs / application.js:

require("custom/instantclick")


我将以下行添加到布局的body标签的末尾以初始化Instantclick:

...
            <script data-no-instant>InstantClick.init();</script>
      </body>
    </html>


然后,我在控制台中收到以下错误:


  (索引):404未捕获的ReferenceError:未定义InstantClick


我是使用Webpacker的新手,也许我做错了什么。但是,instantclick.js文件已导入。知道我在做什么错吗?谢谢。

最佳答案

Webpack的工作原理与Sprockets不同。您遇到的一件事是webpack不会向全局范围公开任何内容。这意味着除非您指示Webpack将这些变量添加到window对象,否则从脚本标签调用函数将无法按预期进行。

您的Instantclick.js文件也不支持模块,也就是说,它不会导出任何内容,例如module.exports = InstantClick

但是,使用webpack,您可以将其配置为同时执行。您需要导出并公开InstantClick

yarn add expose-loader exports-loader


// config/webpack/environment.js

const { environment } = require('@rails/webpacker')

environment.loaders.append('InstantClick', {
  test: /instantclick/,
  use: [{
    loader: 'expose-loader',
    options: 'InstantClick'
  },
    {
    loader: 'exports-loader',
    options: 'InstantClick'
  }]
})

module.exports = environment


当然,还有更多的学习方法和其他方法。以下是一些资源:


https://webpack.js.org/guides/shimming/
http://www.matthiassommer.it/programming/expose-global-variables-methods-modules-javascript/
https://rossta.net/blog/three-ways-webpack-surprises-rails-developers.html

关于javascript - 在Rails 6上未定义Instantclick,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61116414/

10-14 05:47