如何解决vuepress构建文档获取ReferenceError:未定义pageMeta吗?
vuepress开发文档可以,但是 vuepress构建文档出现以下错误,为什么?
...
...
✔ Client
Compiled successfully in 22.59s
✔ Server
Compiled successfully in 15.41s
wait Rendering static HTML...
error Error rendering /404.html: false
undefined
...
...
ReferenceError: pageMeta is not defined
...
...
解决方法
tl; dr 您需要降级作为vuepress的一部分安装的vue-router,以匹配〜3.1.3 。
在尝试实现某些VuePress主题时,我基本上遇到了相同的错误。
AFAICT pageMeta与服务器端(SSR)上的VuePress呈现页面有关。它在使用三重花括号的模板中使用,并且vuepress生成的代码的某些部分为该标记分配了数据,以正确地替换它们。由于我没有在VuePress中接触任何与SSR相关的内容,因此我可以肯定我没有做任何明确导致此特定问题的事情。
因此,我尝试禁用部分代码以查找导致此错误行为的片段。原来,明显的罪魁祸首是vue-router。
我正在vue-router instance exposed in enhanceApp.js of VuePress上应用导航保护。我在那个守卫里面放了代码complying with existing documentation for vue-router。本质上,由于可选的重定向表或前题信息,我正在重定向一些请求。
在vuepress dev
中,此代码有效,但在浏览器控制台中生成错误。这些错误是由于中止最初请求的路由转换而导致启动另一个似乎无法使用vue-router的目的,这是由于中止了最初请求的路由转换而导致的未处理的诺言拒绝。
不起作用:
export default function( context ) {
const { router,siteData: { pages,themeConfig = {} } } = context;
router.beforeEach( handleRedirects );
function handleRedirects( to,from,next ) {
const numPages = pages.length;
for ( let i = 0; i < numPages; i++ ) {
const { path,frontmatter } = pages[i];
if ( path === to.path && frontmatter.redirect ) {
if ( from.path === frontmatter.redirect ) {
next( false );
} else {
next( frontmatter.redirect );
}
return;
}
}
const redirections = themeConfig.redirect || {};
if ( redirections.hasOwnProperty( to.path ) ) {
next( redirections[to.path] );
return;
}
next();
}
}
起作用:
export default function( context ) {
const { router,frontmatter } = pages[i];
if ( path === to.path && frontmatter.redirect ) {
if ( from.path === frontmatter.redirect ) {
next( false );
} else {
next(); // <--- omitting passed target
}
return;
}
}
const redirections = themeConfig.redirect || {};
if ( redirections.hasOwnProperty( to.path ) ) {
next(); // <--- omitting passed target
return;
}
next();
}
}
请明确一点:后一种方法使vuepress build
成功,但是对于正确处理重定向而言,结果不起作用。
恕我直言,问题在于vue-router拒绝了我没有从这里开始的一些承诺。有人可能认为vuepress未能通过正确处理拒绝的路由转换来采用API更改。但这对SSR也是正确的(请看那里给出的第三个代码示例)。
作为解决方案,您可以尝试将vue-router降级到3.2.0之前的版本。就我而言,vuepress正确要求版本^3.1.3
。但是,由于语义版本控制,该选择器也涵盖了最新的3.4.3。
因此,结论是,vue-router发生了重大变化,已在次要版本3.2.0中引入。因此,vue-router不符合语义版本控制。
恕我直言,这种行为上的改变完全不适用于使用vue-router的代码,因此,不必关心路由的进行方式,除非它导致了一些有效的目标。因此,要求切换路由的代码不应引起必须处理的拒绝。该反馈可能是可选的,但现在它是强制性的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。