使用Rails 5.1将已编译的webpacker资产作为响应发送

时间:2018-06-10 13:45:59

标签: ruby-on-rails webpacker

提前谢谢你。

我正在尝试让我的Rails 5.1应用程序响应" application / javascript"请求。

本质上,我希望能够将带有src的标记指向我的Rails应用程序,以便我可以请求执行JS文件。

我在app / javascript / pack下有一个目前只有console.log( 'hello_world' )的文件。我想做的就是在我想要的页面上执行。

我有一个控制器动作如下:

def hello_world_js
  send_file(
    "#{Rails.root}/app/public/packs/hello_world.js",
    :filename => "hello_world.js",
    :type => "application/javascript"
  )
end

src请求导致此控制器操作。但是,我收到以下错误:

ActionController::MissingFile (Cannot read file /Users/mac/Workspace/rails_app_dir/app/public/packs/hello_world.js)

这对我有意义。

通常情况下,视图文件中会有一个javascript_pack_tag,它会触发javascript src的编译和返回。但是,我没有通过这些动作,因此我没有准备好已编译的JS文件。

如何设置它,以便可以从<script/> src请求触发?

投射到未来,我想编译后的文件将在其名称后面包含一串字符。 hello_world.js实际上就像hello_world-8f87b73be32a9b3e4fb2.js一样 - 我怎么能适应这个呢?

我想到的一个解决方案是使用端点呈现.js.erb文件,然后再次附加标记。我想避免这种情况,因为我向服务器发出了两个请求。

非常感谢任何输入。谢谢。

1 个答案:

答案 0 :(得分:2)

我设法通过查看Webpacker源代码来弄明白。

我可以通过以下方式找到公共文件以及通过以下方式在dev中触发编译:

Webpacker.manifest.lookup!( 'hello_world.js' )

可以找到Webpacker :: Manifest here

真的,我通过查找javascript_pack_tag的定义找到了这个。

希望这对于徒步旅行者有用,如果它是一条线,因为我喜欢聊聊这个。