Vuejs+vue-router打包+Nginx配置

本文作者通过亲身经历,详细介绍了使用Vue CLI创建的项目,结合vue-router的history模式进行打包,并在Nginx服务器上配置的过程。文中指出,许多教程推荐修改`publicPath`为`./`,但在实际操作中可能导致刷新页面时资源请求错误。作者强调,正确配置Nginx是解决该问题的关键,无需修改webpack的`publicPath`设置,以确保项目正常运行。

其实这个网上已经有了很多人写了,为什么我还要再写这一篇博客?因为我亲身把他们生产的坑给踩了个通透(摊手。

正文开始

本次的项目是基于vue-cli生成的项目,采用的vue-router的history模式。到这里相信大部人还是类似了,接下来就是一个坑死人不偿命的网上诸多博客都在采用的巨坑。
在进行打包的时候,很多博客里都写了,将/config/index.js下,build中的assetsPublicPath/改为./。我很后悔,为什么当初这样照做的时候不去思考为什么,为什么要这样做,凭什么?如果这个有问题为什么webpack生成的时候不改反而一直放在那里?是谁傻?问题先放在这里,我们先按照那些教程走。修改完后npm run build,这样在你的项目下就生成了一个dist文件夹,里面就是生成的静态内容。假设现在你的dist文件夹已经在你的云服务器中了。接下来开始nginx的配置。
个人采用的是sudo apt-get install nginx安装的nginx,现在在命令行下,
cd /etc/nginx/conf.d/, 并在该目录下 sudo touch vueSite.conf,接下来修改该文件内容。

server {
  listen 3000;  # 假设你项目监听的是3000端口
  root /path/to/dist;
  location / {
      try_files $uri $uri/ /index.html;
  }
}

然后
sudo nginx -t检查正确性,无误后sudo nginx -s reload
接下来在你的浏览器下访问cloudserverhost:3000,就可以访问到你的项目主页了。
目前来看似乎是一切顺利呢,网上的教程真棒棒哦~
然后你可以试试,在cloudserverhost:3000/path/subpath下刷新试试,你会发现,页面没有了,浏览器器里会报错,你会发现请求的js/css等都变成了html页面的内容。这个问题就是出在了./下,我不知道第一个这样写出来的人他的项目是不是很幸运的只有一级路径,又或者他从来不会尝试去刷新页面,否则这个问题是无可避免的,为什么呢?./是相对路径,/则是绝对路径,当你在二级路径下刷新重新请求资源,你的请求路径是什么?把请求路径写出来我们就会发现问题出在哪里了。很难过,我写这篇博客只用不到10分钟,找到这个问题却用了差不多10小时,查了各种方法,我真是万万没想到。
因此,正式上线的项目,没有必要修改/config/index.js下,build中的assetsPublicPath。配置好nginx,你的项目就可以开始起飞了

在使用 Vue Router 时,如果我们的应用需要在部署时不是根路径,而是一个非根路径下运行,可以通过以下步骤进行配置。 首先,在项目的 `vue.config.js` 文件中进行配置。如果没有该文件,可以在项目根目录下创建,并添加以下内容: ```javascript module.exports = { publicPath: '/your-sub-path-name/' // 替换为你的非根路径名称 } ``` 然后,在使用 Vue Router 的时候,需要修改路由配置。假设我们有一个路由配置文件 `routes.js`,其中定义了路由路径: ```javascript import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' Vue.use(Router) export default new Router({ mode: 'history', base: '/your-sub-path-name/', // 替换为你的非根路径名称 routes: [ { path: '/', name: 'home', component: Home }, // 其他路由配置 ] }) ``` 在这个例子中,我们使用了 `base` 字段来指定非根路径的名称。这会告诉 Vue Router 在生成路由链接时,在路径前面添加正确的路径前缀。 接下来,我们需要配置 Nginx 服务器来支持非根路径。打开 Nginx 配置文件,一般是 `/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/default.conf`,找到 `location` 配置部分,添加以下内容: ```nginx location /your-sub-path-name/ { # 替换为你的非根路径名称 alias /your-project-path/dist/; # 替换为你的项目部署路径,注意最后的斜杠 try_files $uri $uri/ /your-sub-path-name/index.html; # 替换为你的非根路径名称 } ``` 在这个例子中,我们使用了 `alias` 字段来指定项目所在的路径,`try_files` 字段用于处理路由重定向,确保正确的路由能被找到。 最后,重新启动 Nginx 服务器,让配置生效。 这样,我们就成功地配置Vue RouterNginx 来支持非根路径了。现在我们的应用可以在非根路径下运行了。记得根据实际情况替换配置中的相应字段。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值