angular默认打包路径是项目于根目录的,这在项目有项目名时就会导致一个问题,即当项目路径是http://ip:port/项目名,我们使用默认的打包方式,就会更改路径为http://ip:port/项目名/路由,因而导致页面刷新时,就会报404找不到页面。
解决此问题的方法为:
第一步:路径 路由使用hash,路径中增加#号
在app-routing.module.ts中@NgModule导入路由模块使用RouterModule.forRoot(routes, {useHash: true}),至此路由就会更改为http://ip:port/项目名/#/路由。(其中http://ip:port/项目名为后台项目启动路径,为后台控制,#/路由,为前端路径。当浏览器解析路径时,#之前后台解析,#之后路径前端解析,前端可以直接控制)
做了上述操作,就不会更改后台路径,就可正常刷新。但是前端打包文件会找不到,因为前端打包基于根目录,浏览器解析找文件时会直接http://ip:port/assets/...寻找文件,但项目路径时http://ip:port/项目名,因此找不到。
第二步:打包 Karma.conf.js中设置basePath为 /项目名/
此设置是修改文件打包所存存放的路径右默认的/ 修改为/项目名/
第三步:解析 修改index.html中的<base href="/项目名/">
这样页面解析时,就会在/项目名/对应文件名寻找相应文件
三步完成,就可以在带项目名的项目下使用了。
注意,若只是本地调试时,没有启动后台项目时,请把index的herf改为/。因为没有本身就不存在项目名,再加上就会导致寻找文件路径不对。
若文章存在问题,请及时指正,期待与您的技术交流。