无法获取由webpacker rails编译的JS文件中设置的视图变量

时间:2019-11-14 15:14:02

标签: ruby-on-rails webpacker

排名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: dateFormat is not defined

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

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

1 个答案:

答案 0 :(得分:0)

默认情况下,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',
  }
})

上面的配置说“使我的应用程序可以从window的{​​{1}}导出”。例如,要从控制台或视图中访问导出的Packs.application对象,请使用dateFormat

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