让我试着解释一下我的需要。
当我在HTML页面中包含 Bootstrap 等库并加载此页面时,也会加载库主文件。大多数情况下,库文件需要其他文件。由于我使用Bootstrap作为示例,让我们考虑glyphicons-halflings-regular.svg
,glyphicons-halflings-regular.ttf
,glyphicons-halflings-regular.woff
和glyphicons-halflings-regular.woff2
,它们都是Bootstrap的一部分。
我正在编写 Rack 中间件来处理来自我的应用程序的请求。此中间件的任务之一是根据某些约定修改请求。例如,在我的应用程序中,Bootstrap将位于此路径
ENV['HOME']/my_app/web/libraries/bootstrap/
然后它的主要CSS文件将是
ENV['HOME']/my_app/web/libraries/bootstrap/css/bootstrap.css
并且,在加载时,它会为我上面提到的所有这些文件生成新的请求。
我需要的是确定另一个文件需要某个文件,比如说glyphicons-halflings-regular.svg
,所以我可以使用我的Rack中间件来相应地更改其位置。像:
Requested file:
`glyphicons-halflings-regular.svg`
Requested-by:
http://my_app_domain.com/web/libraries/bootstrap/css/bootstrap.css
Request address:
http://my_domain_app.com/web/libraries/bootstrap/css/../fonts/glyphicons-halflings-regular.svg
我虽然为每个新请求启动一个线程。然后我只需要考虑主文件的地址作为基地址,并将其添加到该文件生成的每个子请求中。
我很想听听你对此的看法。有没有更好的方法来做同样的建议?
编辑:( spickermann的问题)
不,这不是重点。也许我不清楚,然后我会试着换句话说。
考虑以下结构:
ENV['HOME']/my_app/web/libraries/library1/
| |
| |_ a_css_file.css
| |_ a_jpeg_file.jpg
|
/library2/
|
|_ another_css_file.css
|_ a_jpeg_file.jpg
假设我的中间件收到了一个名为a_jpeg_file.jpg
的文件的请求。我们有两个名称相同的文件,一个在library1
,另一个在library2
。
我决定要投放哪个文件的唯一方法是,我是否知道a_jpeg_file.jpg
或a_css_file.css
是否需要another_css_file.css
。
在第一种情况下,我会将library1
的路径添加到文件中并提供ENV['HOME']/my_app/web/libraries/library1/
。在另一种情况下,我会将路径添加到library2
并提供ENV['HOME']/my_app/web/libraries/library2/
。
在这两种情况下,我都需要知道哪个文件生成了a_jpeg_file.jpg
的请求。
换句话说,我需要知道哪个库上下文需要某个文件。
答案 0 :(得分:4)
也许您可以参数化您的资源like my-image.jpg?dir='dir1'
并解析中间件上的参数。 Rails也采用类似的方法来缓存资产。您还可以使用一些加密和解密参数中的信息的加密函数,例如image.jpt?info=HughYF65fFj7t...
,然后您解密中间件中的信息并使用您发送的信息。