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

Using Rails 5.1 to send compiled webpacker asset as response

提前谢谢你。

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

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

我在 app/javascript/packs 下有一个文件,目前只有 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 的编译和 return。但是,我不会完成这些动作,所以我没有准备好编译的 JS 文件。

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

展望未来,我想象编译后的文件名称后面会有一串字符。 hello_world.js 实际上会类似于 hello_world-8f87b73be32a9b3e4fb2.js - 我该如何适应呢?

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

非常感谢任何意见。谢谢你。

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

我可以通过以下方式找到 public 文件并在控制器中触发编译:

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

可以找到 Webpacker::Manifest here.

真的,我是通过查找javascript_pack_tag的定义找到的。

希望这对旅行者有用,如果它是一个线路,因为我很想聊聊这个。