实战项目编译后未在根目录的解决策略探讨

why 136 2024-09-03

这次给大家带来实战项目编译后不在根目录怎么办,实战项目编译后不在根目录怎么办的注意事项有哪些,下面就是实战案例,一起来看一下。

eg. :

vue-router: history模式 内网环境:192.168.1.1:8080/index.html 外网环境:domain.com/ttsd/index.html

由于开发出来的项目是要部署在客户方,且客户并不想单独拿一个域名(或子域)来部署,这时,打包后的程序就要作一些配置方面的修改了。

修改配置文件

1、把打包后的资源引用修改为相对路径 找到 config/index.js 中 build 属性下的 assetsPublicPath

1

2

3

4

build: {

 ...

 assetsPublicPath: './' // 未修改前的配置为 '/',

}

image.png

2、修改样式引用的资源文件(图片、视频、字体文件等)为相对路径 找到 build/utils.js 中,添加(或修改) publicPath 为 '../../'

1

2

3

4

5

6

7

8

9

if (options.extract) {

 return ExtractTextPlugin.extract({

 use: loaders,

 fallback: 'vue-style-loader',

 publicPath: '../../' // 修改路径

 })

else {

 return ['vue-style-loader'].concat(loaders)

}

image.png 

修改路由

在路由的history模式下,所有的路由都是基于根路径的,如 /xxxx ,由于部署目录未知,所以我们可以根据 location.pathname 来获取到当前访问的文件路径,来修改路由。

vue-router里提供了一个base的属性

base类型: string 默认值: "/" 应用的基路径。例如,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 "/app/" 。

修改路由代码

1

2

3

4

5

6

7

8

9

function getAbsolutePath () {

 let path = location.pathname

 return path.substring(0, path.lastIndexOf('/') + 1)

}

const routers = new Router({

 mode: 'history',

 base: getAbsolutePath(),

 ...

})

至此,打包配置的相关修改已全部完成,项目也能够正常访问。 但还是会有一个问题,跳转到某个路由后,刷新页面,就gg了,页面为空白,此时就要修改nginx的配置了。

修改nginx的配置

官方给的nginx配置是根目录下的,即 https://router.vuejs.org/zh-cn/essentials/history-mode.html#nginx

1

2

3

4

5

location / {

 try_files $uri $uri/ /index.html;

 // 需要修改为

 try_files $uri $uri/ /dist/index.html;

}

注: /dist 根据实际部署的网站目录,修改一下就可以。 个人感觉还可以通过nginx内置的指令去动态获取,在下就不太清楚了。

相信看了本文案例你已经掌握了方法。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网页开发中获取 dom 内 class 值的方法详解
下一篇:使用 VuePress 制作个人网页的详细步骤与方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~