vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)

下面是实现分环境打包的步骤:

步骤一:配置不同环境的参数

Vue项目中,我们可以通过创建不同的环境变量文件来配置不同环境中的参数。比如我们可以通过创建.env.development.env.production.env.test等文件分别配置开发环境、生产环境和测试环境的参数。其中以VUE_APP_前缀的变量可以在项目中通过process.env对象来使用,例如process.env.VUE_APP_API_URL

下面是一个示例的.env.development文件:

VUE_APP_API_URL=http://localhost:3000/api

步骤二:修改webpack打包配置

我们可以使用Vue CLI提供的vue.config.js文件来修改webpack的打包配置。在这个文件中,我们可以通过configureWebpack属性来覆盖默认的配置,也可以通过chainWebpack属性来链式调用配置。下面是一个示例的vue.config.js文件,假设我们要区分开发环境和生产环境:

const path = require('path')

module.exports = {
  chainWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      // 生产环境下的配置
      config
        .entry('app')
        .clear()
        .add('./src/main-prod.js')
      config.plugin('html').tap(args => {
        args[0].isProd = true
        args[0].minify.minifyCSS = true
        return args
      })
      config.set('externals', {
        vue: 'Vue',
        'vue-router': 'VueRouter',
        axios: 'axios',
        lodash: '_',
        echarts: 'echarts',
        nprogress: 'NProgress',
        'vue-quill-editor': 'VueQuillEditor'
      })
      config.optimization.splitChunks({
        chunks: 'all',
        cacheGroups: {
          vendor: {
            name: 'vendor',
            test: /[\\/]node_modules[\\/]/,
            priority: -10,
            chunks: 'initial'
          }
        }
      })
      config.optimization.runtimeChunk('single')
    } else {
      // 开发环境下的配置
      config
        .entry('app')
        .clear()
        .add('./src/main-dev.js')
      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    }
  }
}

在这个示例中,我们使用了process.env.NODE_ENV来判断当前的运行环境,进而修改webpack的配置。在生产环境下,我们修改了入口文件、使用html-webpack-plugin插件将一些参数注入HTML中、使用set方法来设置外部的CDN引入等等。在开发环境下,我们只是修改了入口文件。

步骤三:配置不同的打包命令

我们可以在package.json文件中配置不同的打包命令以区分开发环境和生产环境。比如我们可以通过npm run build:devnpm run build:prod来分别打包开发环境和生产环境的代码。下面是一个示例的package.json文件:

{
  "name": "my-project",
  "version": "0.1.0",
  "scripts": {
    "serve": "vue-cli-service serve",
    "build:dev": "vue-cli-service build --mode development",
    "build:prod": "vue-cli-service build --mode production",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "axios": "^0.19.2",
    "core-js": "^3.4.3",
    "echarts": "^4.7.0",
    "element-ui": "^2.13.2",
    "js-cookie": "^2.2.1",
    "lodash": "^4.17.15",
    "moment": "^2.24.0",
    "nprogress": "^0.2.0",
    "vue": "^2.6.11",
    "vue-quill-editor": "^3.0.6",
    "vue-router": "^3.1.5",
    "vuex": "^3.1.2"
  }
}

在这个示例中,我们通过--mode选项来指定打包的环境。npm run build:dev是以开发环境的方式进行打包,npm run build:prod是以生产环境的方式进行打包。

示例1:基于VUE_APP_ENV变量区分不同环境配置

有时我们需要在多种环境中打包,但每个环境的配置不仅仅是API地址等一些常规配置不同外,还可能存在某些逻辑或者插件在不同环境中的启动模式不同。此时我们可以基于环境变量来划分不同环境,并区分配置不同的npm script命令

VUE_APP_ENV=dev #或者test, production等, 指定不同的环境变量
VUE_APP_API_ROOT=http://api.dev.com/ #dev环境的API请求地址
VUE_APP_START_MODE=autostart #或者manualstart, 是开机自启动还是手动启动逻辑

index.html中设置环境变量,在main.js或者需要的组件中读取环境变量

//index.html
<script>
  window.env = {
    VUE_APP_ENV: process.env.VUE_APP_ENV,
    VUE_APP_API_ROOT: process.env.VUE_APP_API_ROOT,
    ...
  };
</script>

//main.js中读取
console.log(process.env.VUE_APP_ENV);//dev
console.log(process.env.VUE_APP_API_ROOT);//http://api.dev.com/

具体通过configureWebpack属性为webpack的全局变量添加赋值

//vue.config.js
module.exports = {
    configureWebpack: {
        plugins: [
            new webpack.DefinePlugin({
                env: JSON.stringify(process.env.VUE_APP_ENV)
            })
        ]
    }
}

//main.js中读取
console.log(env);//dev

通过env来判断使用环境

//main.js
const env = process.env.VUE_APP_ENV;

if (env === "dev") {
    ...
} else if (env === "test") {
    ...
} else {
    ...
}

package.json中基于不同的env值区分不同的npm script命令

"scripts": {
  "build:dev": "VUE_APP_ENV=dev vue-cli-service build",
  "build:test": "VUE_APP_ENV=test vue-cli-service build",
  "build:prod": "VUE_APP_ENV=production vue-cli-service build"
},

使用npm run build:dev命令可以打出NODE_ENV为development,VUE_APP_ENV为dev的包.

示例2:基于命令行参数区分不同环境配置

小项目常常只需区分两个环境:开发环境和生产环境。此时,基于命令行参数来设置特定的环境变量以区分环境也是非常方便的方式。

除了process.env.NODE_ENV变量,我们可以使用process.argv变量来获取命令行参数。例如,我们可以在命令行中使用--env=dev来设置VUE_APP_ENV变量为dev。下面是一个示例:

//设置dev环境变量
node build.js --env=dev

build.js中解析命令行参数

const args = require('minimist')(process.argv.slice(2));
const env = args.env || 'production'; //默认为生产环境

具体区分不同环境

if (env === "dev") {
    ...
} else {
    //在命令行中不传env参数,即--env使用默认生产
    process.env.NODE_ENV = "production";
    ...
}

完整的build.js示例

const fs = require('fs');
const path = require('path');
const minimist = require('minimist');
const { build } = require('vite');
const resolve = (dir) => path.join(__dirname, '..', dir);
const args = minimist(process.argv.slice(2));
const env = args.env || 'production';

async function main() {
  try {
    //Step 1: create a vite build client
    const clientResult = await build({
      root: resolve('.'),
      mode: env,
      configFile: resolve(`vite.${env}.js`),
      build: {
        ssr: false,
        outDir: resolve(`dist/${env}`),
        assetsDir: 'assets',
        rollupOptions: {
          output: {
            entryFileNames: 'assets/[name].[hash].js',
            chunkFileNames: 'assets/[name].[hash].js',
            assetFileNames: 'assets/[name].[hash].[ext]',
          },
        },
      },
    });

    console.log('正常结束')
    return clientResult
  } catch (e) {
    console.error(e)
    process.exitCode = 1
  }
}

main()

这样,我们就完成了Vue项目的分环境打包步骤,可以通过命令行执行不同的打包命令来打出不同环境的代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现分环境打包步骤(给不同的环境配置相对应的打包命令) - Python技术站

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

相关文章

  • v-html渲染组件问题

    简介: 在Vue.js开发中,v-html指令可以让我们插入HTML代码,有时我们会遇到将一个组件作为HTML输入到v-html指令中的需求。但是这样做存在一些问题,比如组件不会被实例化,无法正常响应数据等。下面是具体的解决方法。 步骤: 1.理解v-html的作用 v-html指令用来动态的输出已经被渲染成 HTML 的字符串,而不是DOM元素。可以将一个…

    Vue 2023年5月28日
    00
  • vue3组合式API中setup()概念和reactive()函数的用法

    Vue 3的组合式API是一种全新的API,可以帮助我们更好地组织代码,以及管理组件内的状态和逻辑。其中,setup()是一个非常重要的概念,而reactive()则是其核心函数之一。 什么是setup()函数 setup()函数是组合式API中的一个重要概念,它允许我们在组件初始化时进行一些设置,例如定义变量、创建函数等等。这个函数在组件实例化之前被调用,…

    Vue 2023年5月28日
    00
  • vue-cli3.0如何修改端口号

    要修改Vue-CLI 3.0项目的端口号,可按照以下步骤进行操作: 打开package.json文件,找到scripts字段下的serve属性。 在serve属性中添加一个”–port”参数并设置一个新的端口号。例如,要将端口号修改为3002,可修改成如下代码: "scripts": { "serve": &quot…

    Vue 2023年5月28日
    00
  • Vue程序调试的方法

    下面是Vue程序调试的完整攻略,包含以下内容: 使用Chrome浏览器的开发者工具进行调试 使用Vue.js官方提供的调试工具Vue.js DevTools 在代码中使用console.log()进行调试 使用断点进行逐行调试 1. 使用Chrome浏览器的开发者工具进行调试 Chrome浏览器的开发者工具内置了强大的调试工具,可以方便地调试Vue程序。在使…

    Vue 2023年5月27日
    00
  • vue.js实现只能输入数字的输入框

    实现只能输入数字的输入框可以通过如下步骤来完成: 步骤一:定义只允许输入数字的指令 在Vue.js中,我们可以通过定义指令来限制输入框的输入内容。下面是一个自定义的v-only-number指令,它可以确保输入框只接受数字: <template> <div> <input v-only-number type="tex…

    Vue 2023年5月27日
    00
  • 解决vue-cli中stylus无法使用的问题方法

    下面是完整的“解决vue-cli中stylus无法使用的问题方法”的攻略。 问题描述 在使用vue-cli创建Vue项目的过程中,通过命令行工具安装完stylus插件后,却无法使用stylus的语法。 原因分析 vue-cli默认并未安装stylus插件,因此如果要在Vue项目中使用stylus,需要先通过npm或者yarn等包管理工具手动安装stylus插…

    Vue 2023年5月28日
    00
  • Vuex 快速入门(简单易懂)

    Vuex 快速入门(简单易懂) 前言 Vuex是Vue.js的一个状态管理工具,可以方便地处理组件之间的数据共享问题。本文将介绍Vuex的基本概念和使用方法。 Vuex的基本概念 Vuex包含了五个基本概念: State:存储数据的地方,可以在组件中直接访问,但是不能直接修改 Getter:相当于State的计算属性,可以根据State计算出新的值,并缓存起…

    Vue 2023年5月27日
    00
  • Vue3中其他的Composition API详解

    当提到 Vue3 中新增的 Composition API 时,通常大家第一个想到的是 setup 函数。但实际上,除了 setup 函数,Vue3 中还有许多其他非常实用的 Composition API。在这个完整攻略中,我们将对这些 Composition API 进行详细的解释和示例说明。 ref 和 toRef ref 和 toRef 是 Vue3…

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