umijs / dumi

📖 Static Site Generator for component library development
https://d.umijs.org
MIT License
3.58k stars 1.18k forks source link

bug: 根路径没有index.html文件导致部署后无法打开首页 #1749

Closed geektcp closed 1 year ago

geektcp commented 1 year ago

bug 现象: npm run build 或者 dumi build后的dist发布到nginx的正确目录下,打开网站,首页根路径无法打开 原因是打包后的dist目录没有index.html文件,但是其子目录是存在index.html文件的。

bug 复现方式,直接参照官网的初始化方案进行安装 https://d.umijs.org/guide/initialize

$ mkdir myapp && cd myapp

# 通过官方工具创建项目,选择你需要的模板
$ npx create-dumi

# 选择一个模板
$ ? Pick template type › - Use arrow-keys. Return to submit.
$ ❯   Static Site # 用于构建网站
$     React Library # 用于构建组件库,有组件例子
$     Theme Package # 主题包开发脚手架,用于开发主题包

# 安装依赖后启动项目
$ npm start

开发环境启动是正常的,但是build不正常。

npm run build之后,就会出现上述问题。

尝试其他方式

禁用exportStatic后,

exportStatic: false,

虽然根目录有了index.html文件,但是子目录却没有index.html文件, 导致其他任意路径刷新页面后就404错误,无法打开。

206 同样的bug在dumi 1.x版本也出现过。

bug: 404 page not found when refresh the page #206

根源

就是打包的时候缺失了index.html文件导致。

PeachScript commented 1 year ago

试了下无法复现,可以提供个最小复现仓库看看,我的步骤:

  1. 找个空目录
  2. npx create-dumi 然后一路默认值创建新项目
  3. 等待依赖自动安装后执行 npm run build
  4. ll dist 查看是否存在 index.html
MahoushoujoMadoka commented 1 year ago

我用build也这样 用npm run docs:build命令就好了

geektcp commented 1 year ago

已经自行解决,说白了就是缺失index.html文件导致,不管是exportStatic启用还是没启用,总有一个目录下没有index.html文件。 最佳实践如下: nginx下的配置文件加入如下关键一行: try_files $uri /index.html;

例如:

        location / {
               root html;
               try_files $uri /index.html;
        }
KuangPF commented 1 year ago

应该是自定义了首页,docs 目录下没有 index.md,build 以后就不会存在 dist/index.html

peterczg commented 1 year ago

.dumirc配置exportStatic: false