我们很高兴使用 Vue 及其服务器端渲染模块 Vue SSR。我的项目的需求之一是我们可以在运行时动态调整Webpack的publicPath,这样我们就可以从我们不同的CDN中获取 Assets (我们有两个,一个用于测试,一个用于生产)。

我们可以使用 __webpack_public_path__ free variable 在客户端轻松完成此操作,您还可以覆盖注入(inject) <head> 的 Assets URL 的 publicPath within the SSR client manifest

然而,我们仍然遇到直接位于模板中并由 SSR 呈现的 Assets URL 的问题。例如,假设我们的标签中有以下图像:

<img src="~@/test.png" />


我们的目标是,在服务器和客户端上,我们都可以通过 publicPath 调整该 URL 以添加我们喜欢的前缀。一旦 vue-ssr-server-manifest.json 生成,似乎没有一种方法可以动态更新 publicPath,结果 URL 最终是相对的,比如 /static/test.png 或我们在 Webpack 配置中最初引用的任何内容。

根据我们的项目限制,无法重建我们的 SSR 包,因此我们需要在运行时执行此操作。我们已经尝试添加占位符值作为我们的 publicPath,例如__CUSTOM_WEBPACK_PUBLIC_PATH__ ,并在运行时在服务器包中替换它们,但这最终是无效的,因为 publicPath 也嵌入在其他 Webpack 生成的文件中。

想知道是否有一种更简洁的方法可以直接通过 Vue SSR 实现我们需要的东西,或者这是我们无法在运行时配置的东西。谢谢阅读!

最佳答案

在这里跟进晚了,但我们最终解决了这个问题。

我们发现在 Node.js 进程中全局设置 __webpack_public_path__ 确实会导致将正确的公共(public)路径应用于我们的服务器包中的 Assets 。

一旦全局出现在窗口(例如客户端)和节点进程中(例如服务器端),事情就开始按我们想要的方式工作了。

关于vue.js - 使用 Vue SSR 渲染页面时的动态 publicPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52303915/

10-11 05:47