[facebook/docusaurus]内容插件拒绝 options.routeBasePath = ''

2024-05-10 318 views
6
描述

当我使用默认预设选项时

module.exports = {
  presets: [
    [
      '@docusaurus/preset-classic',
      {
        pages: {
          path: 'src/pages',
          routeBasePath: '',
          include: ['**/*.{js,jsx,ts,tsx,md,mdx}'],
          exclude: [
            '**/_*.{js,jsx,ts,tsx,md,mdx}',
            '**/_*/**',
            '**/*.test.{js,jsx,ts,tsx}',
            '**/__tests__/**',
          ],
          mdxPageComponent: '@theme/MDXPage',
          remarkPlugins: [require('remark-math')],
          rehypePlugins: [],
          beforeDefaultRemarkPlugins: [],
          beforeDefaultRehypePlugins: [],
        },
      },
    ],
  ],
};

它指出ValidationError: "routeBasePath" is not allowed to be empty 图像

回答

8

不知何故,这是故意这样做的,因为以前它会导致问题,尽管现在使用https://github.com/facebook/docusaurus/pull/3427它不应该再成为问题。

我们可以:

  • 禁止''但打印更好的错误消息建议使用“/”代替
  • 允许 '' 通过验证,因为它现在应该可以正常工作

考虑到我们对 baseUrl ( https://github.com/facebook/docusaurus/pull/8066 ) 进行了相关验证,我想我们应该在这里做同样的事情,并将其应用于所有 3 个内容插件:文档、页面、博客。

为了使事情更加可预测,我希望我们应用与 baseUrl 相同的逻辑,并始终规范化此 URL 段以具有前导/尾随斜杠。

参见https://github.com/facebook/docusaurus/pull/8066进行实现

  baseUrl: Joi.string()
    .required()
    .custom((value: string) => addLeadingSlash(addTrailingSlash(value))),

有什么意见@Josh-Cena 吗?


对于希望做出贡献的外部贡献者来说是个好问题。

仅当您可以处理时才直接发送 PR。

不要领取它,除非先有 PR,否则我们不会将其分配给您。

2

@slorber

你能查一下我的公关吗?我反映你的意见

不知何故,它是故意这样做的,因为以前它会导致问题,尽管现在有了#3427,它不应该再成为问题了。

我们可以:

  • 禁止''但打印更好的错误消息建议使用“/”代替
  • 允许 '' 通过验证,因为它现在应该可以正常工作

考虑到我们对 baseUrl (#8066) 进行了相关验证,我想我们应该在这里做同样的事情,并将其应用于所有 3 个内容插件:文档、页面、博客。

为了使事情更加可预测,我希望我们应用与 baseUrl 相同的逻辑,并始终规范化此 URL 段以具有前导/尾随斜杠。

参见 #8066 的实施

  baseUrl: Joi.string()
    .required()
    .custom((value: string) => addLeadingSlash(addTrailingSlash(value))),
5

坦率地说,我不明白"/"和之间的语义差异""。后者仅对解决“多个根插件”问题有用吗?如果是这样的话,我认为我们应该继续拒绝它,直到实际问题得到妥善解决。我们已经规范了斜杠,但我认为我们不应该允许空字符串,除非它具有明确的语义。

5

坦率地说,我不明白"/"和之间的语义差异""。后者仅对解决“多个根插件”问题有用吗?如果是这样的话,我认为我们应该继续拒绝它,直到实际问题得到妥善解决。我们已经规范了斜杠,但我认为我们不应该允许空字符串,除非它具有明确的语义。

我同意你的观点,但是在这里,即使没有定义routeBasePath,也会默认输入根(/)路径。我不太确定在这种情况下与“”有什么区别。我认为最好将其作为一个基本要素,而不是删除模棱两可的情况。

4

坦率地说,我不明白'/'和之间的语义差异''。后者仅对解决“多个根插件”问题有用吗?

我什至不记得这个问题到底是什么,但我认为如果我们将“”标准化为“/”,它就不会解决任何问题。

如果是这样的话,我认为我们应该继续拒绝它,直到实际问题得到妥善解决。

'/' 有效,因此如果我们将 '' 标准化为 '/' 就不会出现问题,它会像用户提供“/”一样工作?‍♂️

我们已经规范了斜杠,但我认为我们不应该允许空字符串,除非它具有明确的语义。

对我来说,使用“docs”(默认插件routeBasePath值)而不是“/docs/”在语义上并不比使用“”而不是“/”更错误。


routeBasePath不知何故是“插件baseUrl”。对我来说,在baseUrl和之间保持一致是有意义的routeBasePath

现在我没有注意到,但我们实际上不接受baseUrl: ''。我以为我们已经将其标准化为“/”,但它却打印了一条错误消息:

“baseUrl”不允许为空

我建议:

  • baseUrl和都允许 '' routeBasePath,最终发出警告,指出该值应该是 '/'
  • 拒绝 ''baseUrlrouteBasePath使用更清晰的错误消息解释使用 '/' 代替(+ 使用 '' 修复文档)

第一个选项对我来说看起来更好,因为用户会直观地尝试使用“”。

我们是否想在开始时抛出错误,同时我们可以更优雅地处理坏值?

哎呀,我们甚至可以在这里接受 null/false ?‍♂️

9

如果进展停止了,我们再讨论一下如何?

  • 允许 baseUrl 和 RouteBasePath 都为 '',最终发出警告,指出该值应该为 '/'

想想@Josh-Cena 怎么样?

7

routeBasePath不知何故是“插件baseUrl”。对我来说,在baseUrl和之间保持一致是有意义的routeBasePath

是的,我会同意这个立场。好吧,我更喜欢标准化——我知道它以前被用作“多根插件”黑客,这就是我不喜欢的原因"";但如果我们总是标准化,我确实更喜欢无错误的一面。

2

我知道它以前被用作“多根插件”黑客,这就是为什么我不喜欢“”

它发生在这个存储库中吗?如果存在某些情况。我想了解更多。因为我没有听到漏洞。

我读了docusaurus 路由

routeBasePath是“插件baseUrl”。

我认为它可以使用“”,因为它在 root(“/”) 中工作