vue项目打包加固定前缀(包括路由和静态资源)

2 篇文章 0 订阅
1 篇文章 0 订阅


场景

项目不在根节点部署时,需要使用前缀进行访问。


思路

打包时更改路由和静态资源相关配置。


一、路由

1. 增加config/basePath.js文件,在其中封装basePath

config/basePath.js

module.exports = {
  prefixBasePath: '/prefixPath'
}

2. 修改config/index.js

config/index.js

//引入basePath
const { prefixBasePath } = require('./basePath')
const baseUrl = prefixBasePath

//新增代理内容对象
const proxys = {
  // 用户登录/退出
  loginApi: 'http://192.168.1.144:8190/',
  // 通用数据
  publicApi: 'http://192.168.1.144:8190/',
  // 增加超时时间设置
  dataTimeOutApi: {
    port: 'http://192.168.1.144:8190/',
    times: 1200000
  },
}
function proxyTable(apiList) {
  let proxyTable = {}, tableKey = "", isObj = false
  for (var key of Object.keys(apiList)) {
    tableKey = baseUrl + '/' + key
    isObj = apiList[key] instanceof Object
    proxyTable[tableKey] = {
      target: isObj ? apiList[key].port : apiList[key],
      changeOrigin: true,
      xfwd: true,
      pathRewrite: {
        [`^${tableKey}`]: ""
      },
      onProxyReq(proxyReq, req, res) {
        //req中默认是携带有x-forwarded-for请求头的,只需添加X-Real-IP请求头
        req.headers['X-Real-IP'] = req.ip
      }
    }
    // 增加超时时间设置
    if (isObj) {
      proxyTable[tableKey].timeout = apiList[key].times
    }
  }
  // console.log(proxyTable)
  return proxyTable
}
// 使用
proxyTable()
//修改配置
module.exports = {
  dev: {
    assetsPublicPath: baseUrl + '/',
    proxyTable: proxyTable(proxys),
  },
  build: {
    assetsRoot: path.resolve(__dirname, '../dist' + baseUrl),
    assetsSubDirectory: 'static',
    assetsPublicPath: baseUrl + '/',
  }
}

3. src/router/index.js全局路径加前缀

src/router/index.js

//引入basePath
const { prefixBasePath } = require('../../config/basePath')
//设置base
const router = new Router({
  base: prefixBasePath,
  mode: 'history',
  routes: []
})

4. src/common/js/http.js给全局的axios对象配置baseURL,使请求路径前增加前缀。

src/common/js/http.js

//引入basePath
const { prefixBasePath } = require('../../../config/basePath')
//设置axios的baseURL(两种任选一种)
axios.defaults.baseURL = `${prefixBasePath}`;
axios.defaults.baseURL = prefixBasePath;

5. src/common/mixins/public.js增加全局变量

src/common/mixins/public.js

const { prefixBasePath } = require('../../../config/basePath')
export default {
  data() {
    return {
      // 用于代码中写死的的静态资源地址/后端返回的附件地址
      staticUrl: `${prefixBasePath}`,
      // 或
      staticUrl: prefixBasePath,
    }
  }
}

二、静态资源(src/assets/scss/)

1. 增加basepath.scss文件,在其中封装prefixBasePath​

basepath.scss

$prefixBasePath: '/prefixPath';

2. 同级目录中的scss文件可以直接使用$basePath变量

提示:scss文件夹中文件全部读取的情况下
build/utils.js (vue中使用scss

return {
  sass: generateLoaders('sass', { indentedSyntax: true }),
  scss: generateLoaders('sass').concat({
    loader: 'sass-resources-loader',
    options: {
      resources: path.resolve(__dirname, '../src/assets/scss/*.scss')
    }
  }),
}

public.scss

$static_imgUrl: $prefixBasePath + "/static";

echarts.scss

$BI_imgUrl: $prefixBasePath + "/static/images/echarts/";

3. 单个scss文件引入basePath.scss

@import '../scss/basePath.scss'
$static_imgUrl: $prefixBasePath + "/static";

三、nginx部署时代理需添加前缀

nginx.conf

http {
  server {
    location ^~/prefixPath/loginApi/ {
      proxy_pass   http://127.0.0.1:8190/;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
  }
}

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值