ruby-on-rails - Rails Webpacker - 如何从 View [HTML 文件] 访问 webpack 条目文件中定义的对象

标签 ruby-on-rails webpack webpacker

我有一个 Rails 6 应用程序并使用 Webpacker 作为 Assets 。

我在文件 app/javascript/packs/application.js 中有以下代码:

export var Greeter = {
    hello: function() {
        console.log('hello');
    }
}

我的一个 View (HTML)文件中有以下脚本:
<script>
 $(document).ready(function(){
   Greeter.hello();
 });
</script>

注意:我正在使用 JQuery,它工作正常。

我收到以下错误:

Uncaught ReferenceError: Greeter is not defined.



我们如何使用 libraryTargetlibrary公开捆绑的模块,以便也可以从 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]占位符是可选的,但如果您使用多个“包”,则允许您导出到单独的模块。

关于ruby-on-rails - Rails Webpacker - 如何从 View [HTML 文件] 访问 webpack 条目文件中定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58330238/

相关文章:

javascript - 使用 Babel 和 Webpack 生成多个输出

javascript - webpack + babel-loader 产生包含 `eval()` 的输出

javascript - 使用 webpacker 加载字体和图像

css - 使用 CSS 模块时无法在 Sass 中解析图像

ruby-on-rails - 在 webpacker react 应用程序中读取 rails 加密凭据

css - 在每个变量的 rails 中加载特定的样式表

ruby-on-rails - Rails(hartl教程)表user没有名为的列

ruby-on-rails - rails : how to escape curly braces in variable

ruby-on-rails - Rails - 异常 I18n::InvalidLocale 在一个奇怪的地方

javascript - Vuejs 从头部隐藏样式标签 | Laravel-vuejs 应用程序