使用 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
的定义找到的。
希望这对旅行者有用,如果它是一个线路,因为我很想聊聊这个。
提前谢谢你。
我正在尝试让我的 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
的定义找到的。
希望这对旅行者有用,如果它是一个线路,因为我很想聊聊这个。