Ruby on rails Can';t获取由webpacker rails编译的JS文件中设置的视图变量
Rails 5.2.3 Webpacker 4.0.2 我有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
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时出现的一个问题。