我尝试将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/