Open 349989153 opened 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
npm run build:h5
dist/
dist/index.html
Route not found
以为是taro的缺陷,无奈,愤怒,愁眉苦脸
抱着试一试的态度,在qq群Taro(京东)多端开发2群(群号:907665795)里提出了这个问题,有大佬回答:“其实放服务器就可以了 每次返回index”
震惊,无法理解,直接访问index.html的报错,放到服务器上就会消失吗?但我没有别的选择,有枣没枣打一杆子吧。
index.html
然后,我总不能在服务器上试来试去吧,我想服务器也不过是起个nginx的事儿,那我在本地电脑装个nginx,模拟一下试试看好了。
安装nginx,没有比 https://www.cnblogs.com/tandaxia/p/8810648.html 说得更清楚的了。
小tips:brew install nginx的过程中会卡住,ctrl + c结束掉,然后重新brew install nginx即可。
brew install nginx
ctrl + c
安装完毕后,命令行运行nginx,然后浏览器访问localhost:8080,出现nginx的页面即为安装成功
nginx
localhost:8080
然后按照上面安装教程里说的,配置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,瞬间流下感动的泪水,大佬诚不欺我,确实放到服务器上就好了。
sudo nginx
sudo nginx -s reload
localhost:5188
在页面上点了几次,我发现了一个新的问题,直接访问http://localhost:5188是正常的,但是在某个页面刷新,或者直接访问某个路径(如http://localhost:5188/pages/user/index就报404了)
http://localhost:5188
http://localhost:5188/pages/user/index
询问大佬,大佬回答“适配一下 访问路由 都把 index.html 返回给前端,访问任何路径 后端路由返回index.html 即可”
“不像hash 方便 browser必须要服务器配置一下”
大概明白,访问http://localhost:5188时,nginx知道去找index.html,但访问/pages/*等路径时,由于没有配置,所以就404了。
/pages/*
在网上谷歌了一下,最终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并部署到服务器上遇到的问题就都解决了
现象:
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(我这里不多细说,按照上面安装教程完整地设置就可以了):
配置好之后,运行
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的配置是:
这样直接输入地址或者刷新都可以显示对应页面了。
至此,Taro build:h5并部署到服务器上遇到的问题就都解决了