按照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不执行...
publicPath
和 vue-router
的 base
直接用 /
不行吗?
如果有其他的情况,比如说你是部署在多个服务器的不同二级目录下的,那么你最好使用 环境变量 的形式来做。
或者你把你的具体场景描述清楚,我们再看具体情况来给你提供建议。
你可以改变一下思路,通过nginx配置来实现试试:
打包一份代码,不带baseUrl,
部署到两个端口下:
localhost:9527
localhost:9528
然后通过代理转发将localhost/urlA 代理到localhost:9527
localhost/urlB代理到localhost:9528,
这样就只需要打包一份代码了
在Vue-router的history模式下,publicPath
和 base
确实需要配置为与你的实际部署路径相对应。由于你的需求是前端项目需要同时部署在 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
参数来指定使用哪个环境变量文件。
这样,当你构建项目时,只需要根据部署的环境选择相应的环境变量文件,就可以动态地设置publicPath
和base
,从而满足你的需求。
然而,这种方法有一个限制,那就是你需要为每个部署环境都构建一份代码。如果你的项目非常大,这可能会增加构建的时间和生成的包的大小。如果你希望只构建一份代码,那么你可能需要考虑使用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) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以