node.js - 如何在每个服务器请求上设置 webpack 公共路径?
问题描述
我有一个用于客户端和服务器的 webpack 配置,服务器可以访问捆绑的代码,以便我可以调用react.renderToString(<App>)
以生成服务器端渲染的内容(然后内容在客户端得到水合)。
服务器安装在子路径中,因此,要在本地使用它,您需要访问http://localhost:8080/some/path
.
除了资产路径之外,一切都完美无缺!假设<App>
创建一个图像,例如<img src="/static/logo.svg"/>
(即在图像标签中App.tsx
导入./logo.svg
并使用它),因为服务器安装在子路径中,所以 logo.svg 的 HTML URL 应该以基本路径为前缀。所以真正的最终 src 应该是/some/path/static/logo.svg
.
我可以通过__webpack_public_path__
在其他导入之前设置来在客户端上完成这项工作,效果很好!但是我怎样才能在服务器上使用它呢?我只知道它在每个请求中的安装位置,并且__webpack_public_path__
只能在导入期间设置(据我所知),所以感觉就像我的骨头。当然,如果我__webpack_public_path__
在启动后更改,则不会使用新值。
有什么解决办法吗?我很高兴包含任何代码片段来阐明任何上下文。目前,请求通过请求标头到达服务器,我认为“仅”使用它来为资产添加前缀很容易。
作为参考,服务器是 Express 服务器,SVG 文件是通过标准文件加载器加载的。很高兴用其他信息或代码更新我的 Q。我已经为此苦苦思索了好几个小时,因此非常感谢任何帮助、见解、想法或猜测(我对 webpack 等人还很陌生)。
解决方案
我喜欢愚蠢的计划。现在执行一个好的愚蠢计划总比无休止地寻找聪明的计划要好。
所以这是我的愚蠢计划。请注意,这是一个真正的humdinger:
仅在服务器上,我设置__webpack_public_path__
了一些任意标记值,渲染 HTML 输出,然后搜索并替换标记值,在我的实际公共路径中进行交换。
我不会声称这是优雅的,但我可以说的是:它有效。
推荐阅读
- ios - Swift:即使在压缩图像后将该图像写入文件夹后图像大小也在增加
- json - 无法将 Firebase 数据导出为 JSON。
- java - 是否有 [CLASS_NAME]:[METHOD_NAME]:[LINE_NUMBER] 用于 java doc 注释的术语
- angular - Angular 组件中的链接不起作用看起来无法单击
- ruby-on-rails - ActiveRecord::ConnectionAdapters::OracleEnhancedConnectionException "DESC 表名,它存在吗?" 为测试设置运行迁移时出错
- c# - 在 c# 应用程序中使用 python 的最佳实践是什么?
- python - 递归 Python 函数严重影响 Django 站点性能
- c - 如何根据条件将一个数组中的元素添加到另一个未定义大小的数组中?
- java - JSch 库 Kerberos 支持
- ios - iOS:如何在我的应用程序中更改 alertView 的每个文本、标题、按钮的每种字体?