Rails:从webpacker

时间:2018-05-18 15:02:23

标签: ruby-on-rails webpack webpacker

上下文

我尝试使用Webpacker gem将我们的应用程序中的资源移动到webpack。应用程序非常大,所以我需要部分完成。

到目前为止做了什么......

我成功设法使用javascript_pack_tag

调用脚本

我导出一个超级简单的模块:

# javascript/src/javascript/test.js'
const Direction = {
  log_to_console: function(){
    console.log('test');
  }
};
export default Direction;

然后在应用程序入口点

中导入它
# javascript/packs/application.js
import Test from '../src/javascript/test.js'
Test.log_to_console();

最后在布局中渲染它:

# app/views/application.slim
= javascript_include_tag 'application'

结果是:“测试”字符串在浏览器控制台中可见。

问题

目前在整个应用程序中,我们在这样的视图中使用模块:

# app/views/assets/javascripts/test.coffee
log_to_console = ->
  console.log('test');
@Test = { log_to_console }

# app/views/some/template.slim
javascript:
  Test.log_to_console()

但是在将模块移动到webpack后,我再也无法访问Test模块了。

所以我的问题是:

如何配置webpacker gem或重构上面的代码,使{/ 1}}方法在views / browser inspector中可用?

理想情况下,如果我们也可以在sprockets编译的旧javascript文件中访问它们。

1 个答案:

答案 0 :(得分:1)

我现在想出了解决方案。对遇到这个问题的任何人都有帮助。

如果有人找到更好的解决方案,我会很高兴在这里看到它;)。

现在我们需要在视图/其他咖啡文件中看到我们所有的模块/库,我只是通过window对象设置为全局可用。

import Foo from '../src/javascript/foo.js
window.Foo = Foo

我知道这是一种丑陋的反模式,但在我们更新脚本的行为更像独立包之前,它可以作为临时解决方案。