当前位置: 首页 > 知识库问答 >
问题:

javascript - Vue-router history模式下如何使用相对路径进行打包?

贾沛
2024-04-28

按照Vue-router官网,history路由模式下,publicPath无法使用相对路径,需要router里base配对对应路径/url。但现在项目有个需求是前端打一份包,放在两个路径下:
http://111.11.11.1/urlA/
http://111.11.11.1/urlB/

前端项目路由模式是history,只打一份包的话只能配置一个base,如何满足这种需求?

尝试过将publicPath和base都配成相对路径的形式,在页面上能拿到js且js路径正确,但是js不执行...

共有3个答案

郑正文
2024-04-28

publicPathvue-routerbase 直接用 / 不行吗?

如果有其他的情况,比如说你是部署在多个服务器的不同二级目录下的,那么你最好使用 环境变量 的形式来做。


或者你把你的具体场景描述清楚,我们再看具体情况来给你提供建议。

闻人宏盛
2024-04-28

你可以改变一下思路,通过nginx配置来实现试试:
打包一份代码,不带baseUrl,
部署到两个端口下:
localhost:9527
localhost:9528
然后通过代理转发将localhost/urlA 代理到localhost:9527
localhost/urlB代理到localhost:9528,
这样就只需要打包一份代码了

葛驰
2024-04-28

在Vue-router的history模式下,publicPathbase 确实需要配置为与你的实际部署路径相对应。由于你的需求是前端项目需要同时部署在 http://111.11.11.1/urlA/http://111.11.11.1/urlB/ 这两个路径下,而Vue-router并不支持为不同的部署路径打包不同的版本,因此你需要采取一些策略来解决这个问题。

一种可能的解决方案是动态设置publicPath。在构建过程中,你可以根据构建命令来设置不同的publicPath。例如,你可以使用Webpack的DefinePlugin来定义全局变量,然后在代码中根据这个变量来动态设置publicPath

以下是一个基本的示例:

// webpack.config.jsconst path = require('path');const webpack = require('webpack');module.exports = {  // ...  plugins: [    new webpack.DefinePlugin({      'process.env.BASE_URL': JSON.stringify(process.env.BASE_URL || '/urlA/')    })  ],  output: {    publicPath: process.env.BASE_URL || '/urlA/'  }  // ...};

然后,在你的Vue应用中,你可以这样设置base

// main.js 或其他入口文件import Vue from 'vue';import VueRouter from 'vue-router';Vue.use(VueRouter);const router = new VueRouter({  mode: 'history',  base: process.env.BASE_URL || '/urlA/'  // ...});new Vue({  router,  // ...}).$mount('#app');

然后,你可以为不同的部署环境设置不同的BASE_URL环境变量。例如,如果你使用的是.env文件来管理环境变量,你可以为不同的环境创建不同的.env文件,如.env.urlA.env.urlB,然后在构建时通过--env参数来指定使用哪个环境变量文件。

这样,当你构建项目时,只需要根据部署的环境选择相应的环境变量文件,就可以动态地设置publicPathbase,从而满足你的需求。

然而,这种方法有一个限制,那就是你需要为每个部署环境都构建一份代码。如果你的项目非常大,这可能会增加构建的时间和生成的包的大小。如果你希望只构建一份代码,那么你可能需要考虑使用Vue-router的hash模式,或者使用其他前端路由库,如React Router或Reach Router,它们可能提供了更灵活的路由配置选项。

 类似资料:
  • 本文向大家介绍解决vue单页面应用打包后相对路径、绝对路径相关问题,包括了解决vue单页面应用打包后相对路径、绝对路径相关问题的使用技巧和注意事项,需要的朋友参考一下 在项目开发过程中,在部署过程中,用到了反向代理,这就要求前端代码中不能使用绝对路径。但是我们知道,一般情况下,通过webpack+vuecli默认打包后的HTML、css、js等文件,使用的都是绝对路径。下面可以举几个例子来看一下:

  • 问题内容: 我有一个网址: 和相对路径: 我想使用变量和 怎么做? 问题答案:

  • 问题内容: 在我的ASP.net Web项目中,我在.js文件中编写了以下Javascript代码: 直到我尝试将此.js文件加载到子目录中的页面中,效果一直很好。 假设我的项目名称为。 当我在主虚拟目录中使用此代码时,Javascript解释为意思,一切都很好。但是,在子目录中的页面上,Javascript将其解释为意思,因此它不起作用。 如何编写Javascript代码,以便可以从应用程序中任

  • 问题内容: Popen的文档提到您不能指定相对于“更改工作目录” kwarg的可执行路径。 如果不是None,则子目录的当前目录将在执行之前更改为 。 请注意,搜索可执行文件时不会考​​虑此目录,因此您无法指定程序相对于的路径。 但是python在我的系统上的行为似乎与这种说法直接矛盾: 是否在使用相对路径来依赖于平台且不应依赖的东西?还是这是一个文档错误? (从评论这个问题产卵由glglgl这里

  • 问题内容: 我有以下代码,在部署到测试服务器之前,它工作正常: 问题是我已部署到虚拟目录,并且下面的调用试图从服务器根目录访问GetUserList。这是有道理的,而且我知道许多解决方法。 我想知道的是一种 正确的 方式,该方式以可移植且可在Angular中维护的方式引用服务URL。 问题答案: 我建议在头部使用HTML基本标记,并对与此相关的所有路径进行编码。例如,在ASP.NET中,您可以获取

  • 本文向大家介绍Linux 相对路径和绝对路径的使用,包括了Linux 相对路径和绝对路径的使用的使用技巧和注意事项,需要的朋友参考一下 01. 概述 绝对路径和相对路径在shell环境中经常遇到,各有用处。有时候相对路径比较方便,有时候绝对路径比较方便。 02. 绝对路径(Absolute Pathname) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以