NuxtJS静态生成的HTML页面在调用/index.html时不加载Javascript

时间:2020-09-03 08:27:45

标签: javascript vue.js nuxt.js server-side-rendering

我正在开发一个nuxtjs项目,该项目将为静态使用而生成。当然它使用Javascript例如导航,一些表格等等。

当我在 npm run dev 中使用该页面时,一切正常。

使用 npm run build && npm run generate 导出后,我将/ dist生成的内容部署到我的服务器(用户要求的cdn,在这种情况下为Google Cloud Storage),我可以使用该页面而无需如果不添加 index.html 后缀,则会出现任何问题。

示例:

访问https://page.com/subpage/很好

但是

不是真的访问https://page.com/subpage/index.html

是的,它使用CSS和DOM呈现内容,但是Javascript根本不起作用。在Google Chrome浏览器的开发工具中,我可以看到在两种情况下javascript似乎都已加载,但在第二种情况下并未调用。请参阅所附的屏幕截图。两者都是相似的。

Dev-Tools

我的nuxt-Config在渲染,构建配置方面几乎是空的。我只是禁用了ressourceHints,仅此而已。我不确定这是否是路由器仅接受包含index.html的文件夹的问题。路由器路径是由nuxtLinks动态生成的。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

更新

搜索了大约1-2小时后,我终于找到了解决方法。

有一种方法可以将index.html后缀添加为路由器的每个路径的别名。

通过在nuxt-config中扩展路由器,理论上您可以基于路由器路径添加别名。这并不总是最好的方法,但是在这种情况下它会很好地工作。

router: {
  extendRoutes(routes) {
    routes.forEach((route) => {
      // When options.generate.subFolders is true (default)
      const alias =
        route.path.length > 1 ? `${route.path}/index.html` : '/index.html'
      // When options.generate.subFolders is false
      // const normalizedRoute = route.path.replace(/\/$/, '') // Remove trailing slashes if they exist
      // const alias =
      //   route.path.length > 1 ? `${normalizedRoute}.html` : '/index.html'
      route.alias = alias
    })
  }
}

我从animagnam(https://www.reddit.com/r/Nuxt/comments/gzwrqu/visiting_generated_site_routes_with_trailing/ftnylrt?utm_source=share&utm_medium=web2x&context=3)的reddit帖子中删除了此消息,它在生产和测试中都非常有效。