ruby-on-rails - Rails Webpacker - 如何从视图 [HTML 文件] 访问 webpack 条目文件中定义的对象
问题描述
我有一个 Rails 6 应用程序并使用 Webpacker 作为资产。
我在文件中有以下代码app/javascript/packs/application.js
:
export var Greeter = {
hello: function() {
console.log('hello');
}
}
我的一个视图(HTML)文件中有以下脚本:
<script>
$(document).ready(function(){
Greeter.hello();
});
</script>
注意:我正在使用 JQuery,它工作正常。
我收到以下错误:
未捕获的ReferenceError: Greeter未定义。
我们如何使用libraryTarget
和library
公开捆绑的模块,以便也可以从 HTML 文件中访问它?
或者,还有其他方法可以使用 Rails Webpacker 吗?
任何帮助将非常感激!
解决方案
要在不直接window
更改应用程序代码中的对象的情况下执行此操作,您需要Greeter
从包中导出为命名导出application.js
并扩展 Webpack 配置output
以指定库名称和目标var
(或者window
也可以使用)。
// config/webpack/environment.js
environment.config.merge({
output: {
library: ['Packs', '[name]'], // exports to "Packs.application" from application pack
libraryTarget: 'var',
}
})
// app/javascript/packs/application.js
export {
Greeter
}
<script>
$(document).ready(function(){
Packs.application.Greeter.hello();
});
</script>
这个library
名字是任意的。使用[name]
占位符是可选的,但如果您使用多个“包”,则允许您导出到单独的模块。
推荐阅读
- modelica - Modelica“流体”库可以处理阻塞流吗?
- javascript - 在网站上单击后退/前进后,AJAX 调用不更新部分页面内容
- python - 写入 csv 文件时循环字符串变量的每个字符。如何避免这种情况?
- flutter - 带有更改通知器的抽象类
- angular - Angular 在路由时删除 url 中的目录
- python - 字符串系列上的最大 agg
- javascript - 无法在 Angular 模块中加载 .js 文件
- c - 具有不相关条件的 For 循环
- c++ - 在加载之前从 MSHTML 文档中删除无效 URL
- sequelize.js - 使用外键时,获取“User.DepartmentDepartmentId”而不是“User.DepartmentId”