Rails & Webpack:如何调用应用包中的函数?

Rails & Webpack: How do I call functions in application pack?

我似乎无法弄清楚如何使用 Webpacker 调用 Rails 6 中的函数。如果在控制台中调用它们,我会收到该函数未定义的消息。 我怎样才能调用这些函数?还是我不应该这样做的充分理由?

问题的最简单形式: 在 application.js 我有一个函数叫做 something.

# app/javascripts/packs/application.js
function something() {
    console.log("something")
}
$(document).on("turbolinks:load", something())

# console
something

但是当我在带有 onClick() 的 link 中或在 *.js.erb 文件中使用它时,或者只是将函数放在控制台中时,我得到错误 ReferenceError: something is not defined

该函数确实出现在我的 Webpacker 编译的 application.js 文件中

我的 webpack 设置如下:(我只调整了 webpack 配置以包括 jQuery 和 popper.js)

# config/webpack/environment.js

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

environment.plugins.prepend('Provide',  
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    jquery: 'jquery',
    Popper: ['popper.js', 'default'],
    ActionCable: 'actioncable',
  })
)

const config = environment.toWebpackConfig()

config.resolve.alias = {
  jquery: "jquery/src/jquery",
}


module.exports = environment

问题是 webpack 没有公开这些函数。 为了能够从 *.js.erb 文件调用它们,您需要在 window.

上定义它们
# app/javascripts/packs/application.js
function something() {
    console.log("something")
}
window.app.something

在你的*.js.erb

window.app.something();