VuePress:在预渲染上下文或浏览器中确定 运行

VuePress: Determine if running in context of pre-render or in browser

在我的 VuePress 站点中我的 Vue 组件的逻辑中,我可以确定它是 运行ning 在 vuepress build 生成静态 HTML 的上下文中还是在上下文中真正的浏览器会话?

我的用例是我正在使用 momentjs 相对于当前日期时间来格式化日期时间。例如。说 'Yesterday' 而不是 '2020-04-03'。

问题是 VuePress 在构建时生成的静态 HTML 包含与构建日期相关的短语 运行。我希望静态 HTML 始终包含绝对日期时间,而不是相对日期时间。

对于站点的人类访问者,Vue 运行s 将预渲染的 date/phrase 替换为正确的新计算的 phrase/date,他们 none 更聪明.

对于不 运行 JavaScript 的机器访问者,他们会看到预呈现的相关短语,该短语仅在构建当天是正确的。

基本上我想做这样的事情:

if (/* in context of vuepress pre-rendering */) {
  return 'content for static HTML'; // eg '2020-04-03'
}
// else, In context of visitors browser
return 'my dynamic content that depends on the date at view time'; // eg 'Yesterday'

提前致谢。

您可以尝试将您的代码分成不同的生命周期挂钩来实现这一点。

在你的Vue组件的created钩子中生成绝对时间,然后在mounted钩子中动态计算相对时间。

created在ssr和client期间都会被调用。但是mounted中的代码只会执行during client