vue-cli3环境变量与分环境打包的方法示例

下面是关于“vue-cli3环境变量与分环境打包的方法示例”的详细说明:

什么是环境变量?

在编写前端代码时,我们常常会遇到需要在不同的环境(如开发环境、测试环境、生产环境)使用不同的配置的情况,比如不同的 API 地址、不同的请求路径等等。这时我们就需要使用环境变量来解决这个问题。

环境变量是一种全局可用的变量,可以在应用程序的任何地方访问它们,不仅如此,我们可以在不同的环境中设置不同的环境变量来实现不同环境下的不同数据获取。

Vue 项目中,我们可以使用环境变量来完成这一操作。

如何设置 vue-cli3 项目中的环境变量?

vue-cli3 提供了一种非常方便的方式来设置环境变量,通过在项目根目录下新建不同的 .env.[mode] 文件来配置不同的环境变量。

其中,[mode] 可以为如下几种:

  • .env:默认的环境变量文件,适用于所有环境。
  • .env.development:开发环境的环境变量文件。
  • .env.test:测试环境的环境变量文件。
  • .env.production:生产环境的环境变量文件。

在这些环境变量文件中,我们可以定义一个或多个变量,例如:

VUE_APP_TITLE=My App
VUE_APP_API_URL=http://localhost:3000

由于 Vue CLI 使用了 dotenv 库,我们可以在 Vue 项目代码中使用这些环境变量:

console.log(process.env.VUE_APP_TITLE)  // My App
console.log(process.env.VUE_APP_API_URL)  // http://localhost:3000

需要注意的是,这些变量名必须以 VUE_APP_ 开头,以便被识别为 Vue CLI 的环境变量,并在编译时添加到应用程序中。

如何在 vue-cli3 项目中分环境打包?

在实际项目中,不同的环境之间不仅仅可能存在配置文件的差异,还可能存在需要打包到不同目录或者生成不同文件名等多种差异,因此单纯的使用环境变量来区分环境是远远不够的,我们还需要对不同环境进行分环境打包。

Vue CLI3 通过 vue.config.js 文件来配置打包相关选项,其中,我们可以通过 config 对象来访问环境变量:

const ENV = process.env.NODE_ENV  // 获取当前环境

module.exports = {
  // ...
  configureWebpack: {
    // ...
  }
  // ...
}

我们可以根据环境变量来配置不同的打包选项,在 vue.config.js 中定义如下配置选项:

const ENV = process.env.NODE_ENV  // 获取当前环境

module.exports = {
  publicPath: './',  // 配置打包后的资源路径
  outputDir: 'dist/' + ENV,  // 配置打包后的目标文件夹
  filenameHashing: true  // 配置生成的文件名是否包含 hash 值
}

在上述配置中,我们将 outputDir 设置为 'dist/' + ENV,即在不同环境中指定不同的打包目标文件夹。

需要注意的是,如果你修改了 outputDir,那么你还需要在你的 index.html 中手动指向这个新的目标文件夹,例如:

<link rel="icon" href="<%= BASE_URL %>dist/<%= process.env.NODE_ENV %>/favicon.ico">

这里的 <%= process.env.NODE_ENV %> 就表示当前环境变量所对应的目标文件夹。

示例 1:生产环境下的分环境打包

我们假设,我们的生产环境需要将打包文件压缩成 zip 包,那么我们就可以在 vue.config.js 中添加如下配置:

const ENV = process.env.NODE_ENV

const UglifyPlugin = require("uglifyjs-webpack-plugin")
const ZipPlugin = require('zip-webpack-plugin')

module.exports = {
  publicPath: './',
  outputDir: 'dist/' + ENV,
  filenameHashing: true,
  configureWebpack: config => {
    if (ENV === 'production') {
      // 生产环境下
      config.optimization = {
        minimizer: [
          new UglifyPlugin({
            uglifyOptions: {
              compress: {
                // 省略 log
                drop_console: true
              }
            }
          })
        ]
      }
      // 打包为 zip 文件
      config.plugins.push(new ZipPlugin({
        filename: `dist.zip`
      }))
    }
  }
}

在上面的配置中,我们只在生产环境下配置了压缩和打包处理,而开发环境和测试环境则只使用了默认的配置,不需要多余的操作。

示例 2:不同环境下的 API 接口地址配置

我们假设,在开发环境中我们调用的 API 接口是开发环境的接口,而在测试和生产环境中调用的接口却是不同的,那么我们就可以通过环境变量来配置 API 接口的地址,例如:

.env.development 文件中添加:

VUE_APP_API_URL=http://localhost:3000

.env.test 文件中添加:

VUE_APP_API_URL=https://api.test.com

.env.production 文件中添加:

VUE_APP_API_URL=https://api.example.com

然后在代码中使用这些环境变量,例如:

const API_URL = process.env.VUE_APP_API_URL
axios.get(API_URL + '/user/info')

在以上代码中,我们通过 process.env.VUE_APP_API_URL 获取了当前环境下配置的 API 地址,然后通过 axios 发送请求。这样我们就可以在不同的环境下使用不同的 API 地址。

希望这些示例能够帮助你更好地理解 Vue CLI3 环境变量和分环境打包的用法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-cli3环境变量与分环境打包的方法示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 关于Node.js中的JXcore打包示例

    下面就来详细讲解“关于Node.js中的JXcore打包示例”的完整攻略。 Node.js中的JXcore打包示例 简介 JXcore是一种基于Node.js的开源项目,主要用于将Node.js项目转化为独立的应用程序,支持Node.js的所有模块和API。使用JXcore可以将原本需要使用Node.js命令行执行的代码打包成二进制文件,方便部署和使用。 安…

    Vue 2023年5月28日
    00
  • 详解Vue快速零配置的打包工具——parcel

    详解Vue快速零配置的打包工具——parcel 在Vue.js项目开发中,打包工具是必不可少的。常见的打包工具有Webpack、Rollup、Browserify等。这些打包工具都需要进行复杂的配置才能完成项目的打包。本文将介绍一种快速零配置的Vue打包工具——parcel,它可以快速地完成项目的打包,让我们能够更好地专注于代码的编写。 什么是parcel …

    Vue 2023年5月27日
    00
  • vue filter的四种用法小结

    下面是“Vue Filter的四种用法小结”的详细讲解。 什么是Vue Filter? Vue Filter是Vue.js中提供的一种数据过滤器(Data Filter)。它可以通过对数据进行转换和过滤来得到符合需求的数据。Filter可以在模板中使用,也可以在JavaScript代码中使用。 Vue Filter的四种用法 全局Filter 全局Filte…

    Vue 2023年5月28日
    00
  • 解决vue无法侦听数组及对象属性的变化问题

    下面是解决Vue无法侦听数组及对象属性的变化问题的完整攻略: 背景 在Vue中,我们可以使用vue实例上提供的$watch方法来监测数据变化,在数据变化时做出相应的处理。但是,在Vue中我们使用$watch时,会发现无法侦听到对象或者数组的变化。这是因为Vue只能侦听属性的变化,而对于数组的操作,我们可以使用Vue提供的$set方法来实现。 解决方案 监听对…

    Vue 2023年5月28日
    00
  • await 错误捕获实现方式源码解析

    让我们来详细讲解一下“await 错误捕获实现方式源码解析”的完整攻略。 什么是 await? 在 JavaScript 中,await 关键字可以用于暂停执行异步函数,并等待该异步函数的返回结果。我们可以使用 await 来获取异步操作中的结果,而不必使用回调函数或者 Promise 链来处理异步结果。 await 的错误捕获实现方式 在使用 await …

    Vue 2023年5月28日
    00
  • Element实现表格嵌套、多个表格共用一个表头的方法

    当需要在Element框架中实现表格嵌套或多个表格共用一个表头时,可以采用以下两种方法: 方法一:使用 render 函数自定义表格中每一列的渲染方式 示例如下: <template> <el-table :data="tableData"> <el-table-column prop="name&…

    Vue 2023年5月29日
    00
  • Vue.js函数式组件的全面了解

    Vue.js函数式组件的全面了解 一、什么是函数式组件 函数式组件是指仅接收 props,并且没有像组件实例这样的状态(也就是 data 选项)的组件。这意味着函数式组件无法像普通组件那样维护自身的状态,但是,由于它们没有状态,所以它们渲染起来开销较小,执行效率更高。函数式组件是 Vue 2.3 新增的特性。 二、如何定义函数式组件 定义函数式组件很简单,直…

    Vue 2023年5月27日
    00
  • 一篇Vue、React重点详解大全

    一篇Vue、React重点详解大全 本文旨在给读者一份完整的Vue和React学习指南,包括两个框架的核心概念、使用方法、常见问题等,帮助读者更好地理解和掌握这两个流行的前端框架。 Vue 1. Vue基础概念 Vue是一款渐进式JavaScript框架,它的特点是易用、灵活、高效,适用于开发中小型Web应用。Vue的核心概念包括: 1.1 Vue实例 Vu…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部