Ruby on rails Can';t获取由webpacker rails编译的JS文件中设置的视图变量

Ruby on rails Can';t获取由webpacker rails编译的JS文件中设置的视图变量,ruby-on-rails,webpacker,Ruby On Rails,Webpacker,Rails 5.2.3 Webpacker 4.0.2 我有layouts/application.html.erb调用dateFormat.initialize() 此函数在javascript/packs/application.js const dateFormat = { railsDateMask: "YYYY/MM/DD", initialize() { } } 当我转到索引页时,浏览器控制台中出现异常 ReferenceError:未定义日期格式 以前-此代码位于a

Rails 5.2.3

Webpacker 4.0.2

我有
layouts/application.html.erb
调用
dateFormat.initialize()

此函数在
javascript/packs/application.js

const dateFormat = {
  railsDateMask: "YYYY/MM/DD",

  initialize() {
  }
}
当我转到索引页时,浏览器控制台中出现异常

ReferenceError:未定义日期格式

以前-此代码位于
assets/javascripts/application.js中,一切正常


我找到了很多解释,其中一个解决方案是将其设置为非
const dateFormat
,而是
global.dateFormat
,但我认为这不是最好的解决方案,也许还有其他方法。

默认情况下,Webpack不会将任何内容导出到全局范围。您可以按照您的建议执行类似于
window.dateFormat=…
的操作,但我更喜欢将Webpack配置为导出选定的模块。这是一个多一点的工作,但更灵活,更不容易出错

首先,您需要从入口点导出所需的全局引用。因此,将您的对象声明为来自
app/javascript/packs/application.js
的导出:

export const dateFormat = { ... };
现在告诉Webpack您想从
config/Webpack/environment.js
中的Webpack配置将输出导出到窗口目标

environment.config.merge({
  output: {
    library: ['Packs', '[name]'],
    libraryTarget: 'window',
  }
})
上面的配置显示“使我的应用程序导出在
窗口上可用,从
Packs.application
”。例如,要从控制台或视图中访问导出的
dateFormat
对象,请使用
window.Packs.application.dateFormat


注意:名称空间
Packs.[name]
是任意的;使用适合您的应用程序的任何东西。
[name]
占位符将为每个入口点创建一个单独的名称空间,如果您最终使用多个入口点,这将有助于防止冲突。

是否签入了javascripts/application.js有一个//=require packs/application?或//=需要树?我不应该检查这个文件,因为如果我将它添加到
javascripts/application.js
中,它将由链轮编译,我不需要它。正如你在我的问题和描述的标题中所看到的,我试图解决使用webpacker时出现的一个问题。