vue2配置外移

配置外移

思考一下:原始的依附于环境变量打包是怎样的?部署环境不同如何打包?环境变量修改后直接生效吗?

应用场景:

不同运行环境下部署前端项目,需要打包不同路径的前端包。配置外移可以实不同环境下部署项目,只需要修改配置文件即可。

具体实施:

1、安装插件

npm i generate-asset-webpack-plugin -S

2、配置 vue.config.js

在 vue.config.js 中添加如下配置

const GenerateAssetPlugin = require('generate-asset-webpack-plugin')
var createServerConfig = function (compilation) {
  // 配置需要的api接口
  const cfgJson = {
    // oss域名
    oss_base_url:
      '/',
    // 是否加密 true => 加密  false => 不加密
    is_encrypt: false,
    // 接口地址
    serve_base_url: '',
  }
  return JSON.stringify(cfgJson)
}
module.exports = {
  chainWebpack: (config) => {
    // ...
    // 配置外移
    config.plugin(GenerateAssetPlugin).use('generate-asset-webpack-plugin', [
      {
        // 此处是打包形成的配置文件名称,可自定义
        filename: 'serverconfig.json',
        fn: (compilation, cb) => {
          cb(null, createServerConfig(compilation))
        },
        extraFiles: [],
      },
    ])
  },
}

3、配置 main.js

// 在本地添加一个serverconfig.js文件
import serverconfig from './serverconfig.js'
if (process.env.NODE_ENV === 'development') {
  // 本地开发时候只需要变更本地的serverconfig.js即可
  Vue.prototype.$configApiUrl = serverconfig
  initVue()
} else {
  getConfigJson()
}
// 获取外放的配置文件
function getConfigJson() {
  // 此处调用封装的axios请求
  request
    .get('serverconfig.json')
    .then((result) => {
      // 挂载到vue原型上面,这样就可以在项目中调用了
      Vue.prototype.$configApiUrl = result
      // 等待必要的环境变量请求回来了,再渲染页面
      initVue()
    })
    .catch((error) => {
      console.log('getConfigJson Error!', error)
    })
}
// 实例化vue
function initVue() {
  new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount('#app')
}

4、本地新增 serverconfig.js 文件。 配置如下,保持和 vue.config.js 一致即可,本地开发时候调试方便

// 自己本地维护,不提交代码库
export default {
  // oss域名
  oss_base_url:
    '',
  // 是否加密 true => 加密  false => 不加密
  is_encrypt: false,
  // 接口地址
  serve_base_url: '',
}

5、调用方式

// js文件中需要实例化vue再调用
new Vue().$configApiUrl.serve_base_url
// vue文件中调用方式:
this.$configApiUrl.serve_base_url

附:解答前面思考的问题

1)原始打包方式,用package.json文件scripts中的命令。打包不同的环境需配置不同的命令行
{
    "scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
        "build:dev": "vue-cli-service build --mode development",
        "lint": "vue-cli-service lint",
        "eslint": "eslint --fix --ext .js,.vue src"
    }
}
2) 为什么需要重启

.env 环境文件是通过运行 vue-cli-service 命令载入的,因此环境文件发生变化,你需要重启服务。

vue-cli-service serve 会启动一个开发服务器(基于webpack-dev-server)并且附带了开箱即用的模块热重载(Hot-Module-Replacement)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值