javascript - 在 Rails 6 上未定义 Instantclick
问题描述
我尝试将Instantclick集成到我的 rails 6 应用程序中。我在我的 javascript/custom 文件夹中添加了instantclick.js 文件。然后,我将它导入到 javascript/packs/application.js 中:
require("custom/instantclick")
我在布局的 body 标记的末尾添加了以下行来初始化 Instantclick:
...
<script data-no-instant>InstantClick.init();</script>
</body>
</html>
然后,我在控制台中收到以下错误:
(index):404 Uncaught ReferenceError: InstantClick 未定义
我是使用 webpacker 的新手,也许我做错了什么。但是,将导入 instantclick.js 文件。知道我做错了什么吗?谢谢。
解决方案
Webpack 的工作方式与 Sprocket 不同。您遇到的一件事是 webpack 不会向全局范围公开任何内容。window
这意味着除非您指示 webpack 将这些变量添加到对象中,否则从脚本标签调用函数将无法按预期工作。
您的 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
当然,还有更多要学习的内容和其他方法。以下是一些资源:
推荐阅读
- syntax - 使用分号语法了解评估和执行顺序
- python - 无法卸载numpy,
- python - 从列表中查找两次尝试中一个元素出现的最大总和
- php - 将数组重新排序为多维数组
- r - opencpu 不显示已安装的软件包
- c# - 从给定的日期字符串中提取 DateTime 格式
- php - 带有 PHP 会话变量的意外 T_STRING
- python - 如何通过更改 ONE 运算符来更改我的程序以将列表排序为降序?
- c# - 如何将 Web 服务中使用的 Bitmap 类转换为 C# 应用程序中的 System.Drawing.Bitmap?
- javascript - 如何返回使用 Google Sheets API spreadsheets.values.get 读取的值?