349989153 / 349989153.github.io

My personal blog.
0 stars 0 forks source link

解决Taro v3.0.7 build:h5之后,报错Route not found #12

Open 349989153 opened 4 years ago

349989153 commented 4 years ago

现象:

Taro v3.0.7

config/index.js的配置是:h5.publicPath = '/',h5.router.mode = 'browser'(此为前提)

我运行npm run build:h5,得到dist/文件夹,直接打开dist/index.html文件,控制台会报错Route not found

以为是taro的缺陷,无奈,愤怒,愁眉苦脸

求助他人

抱着试一试的态度,在qq群Taro(京东)多端开发2群(群号:907665795)里提出了这个问题,有大佬回答:“其实放服务器就可以了 每次返回index”

震惊,无法理解,直接访问index.html的报错,放到服务器上就会消失吗?但我没有别的选择,有枣没枣打一杆子吧。

然后,我总不能在服务器上试来试去吧,我想服务器也不过是起个nginx的事儿,那我在本地电脑装个nginx,模拟一下试试看好了。

安装nginx

安装nginx,没有比 https://www.cnblogs.com/tandaxia/p/8810648.html 说得更清楚的了。

小tips:brew install nginx的过程中会卡住,ctrl + c结束掉,然后重新brew install nginx即可。

安装完毕后,命令行运行nginx,然后浏览器访问localhost:8080,出现nginx的页面即为安装成功

然后按照上面安装教程里说的,配置nginx(我这里不多细说,按照上面安装教程完整地设置就可以了):

user root owner;
#.....省略中间
server {
      listen  5188;
      server_name localhost;

      location / {
        root /Users/workspace/company/new-time-center/dist;
        index index.html index.htm;
      }
    }

配置好之后,运行sudo nginx(如果已经启动nginx,运行sudo nginx -s reload),访问localhost:5188,瞬间流下感动的泪水,大佬诚不欺我,确实放到服务器上就好了。

新的问题

在页面上点了几次,我发现了一个新的问题,直接访问http://localhost:5188是正常的,但是在某个页面刷新,或者直接访问某个路径(如http://localhost:5188/pages/user/index就报404了)

询问大佬,大佬回答“适配一下 访问路由 都把 index.html 返回给前端,访问任何路径 后端路由返回index.html 即可”

“不像hash 方便 browser必须要服务器配置一下”

大概明白,访问http://localhost:5188时,nginx知道去找index.html,但访问/pages/*等路径时,由于没有配置,所以就404了。

在网上谷歌了一下,最终nginx的server的配置是:

server {
      listen  5188;
      server_name localhost;

      location / {
        root /Users/luyang/workspace/company/new-time-center/dist;
        index index.html index.htm;
      }

      location /pages {
        alias /Users/luyang/workspace/company/new-time-center/dist;
        try_files $uri $uri/ /index.html;
      }
}

这样直接输入地址或者刷新都可以显示对应页面了。

至此,Taro build:h5并部署到服务器上遇到的问题就都解决了