vue.js - 使用 Vue SSR 渲染页面时的动态 publicPath

标签 vue.js webpack vue-ssr

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

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

然而,我们仍然对直接位于模板中并由 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/

相关文章:

ruby-on-rails - Rails 应用程序无法编译 js : (No route matches [GET] "/packs/application-xxxx.js"):

typescript - 如何在 typescript 中用 Electron 引用节点 fs API?

vuex - 带有 vuex-persist 的 Nuxt.js - 页面刷新时 asyncData 中的持久状态不可用

javascript - 输入未与 Vue.js 正确绑定(bind)

node.js - 如何指示 webpack 观察 NPM 链接依赖项(包)的变化

javascript - 通过 vue-cli-service build 构建 vue 项目,同时缺少 .在文件路径中

vue.js - 如何删除 nuxt 项目中的 window.__nuxt__,它对我来说太大了

vue.js - vue js v-link同路由不更新内容

javascript - Firestore 中存储的 Date 对象的行为将会改变,您的应用可能会崩溃