详解vue.js根据不同环境(正式、测试)打包到不同目录

yizhihongxing

要根据不同环境(正式、测试)打包到不同目录,我们可以使用webpack进行配置。

首先,在项目根目录下创建一个config文件夹,里面创建三个文件:dev.env.jsprod.env.jsindex.js

dev.env.js文件内容如下:

module.exports = {
    NODE_ENV: '"development"',
    API_HOST: '"http://localhost:8080"' //定义测试环境的API地址
}

prod.env.js文件内容如下:

module.exports = {
  NODE_ENV: '"production"',
  API_HOST: '"http://www.example.com"' //定义正式环境的API地址
}

index.js文件内容如下:

let env = process.env.NODE_ENV === 'production' ? require('./prod.env') : require('./dev.env')
module.exports = Object.assign({
    API_HOST: env.API_HOST, //通过引入不同环境的env文件,获取API地址
}, env)

接着,在webpack.prod.conf.js中引用我们刚刚创建的index.js文件:

const webpack = require('webpack')
const env = require('../config/index')

module.exports = {
    //...
    //根据环境的不同配置不同的打包目录
    output: {
        path: env.NODE_ENV === 'production' ? config.build.assetsRoot : config.dev.assetsRoot,
        filename: '[name].js',
        publicPath: env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env': env
        }),
        //...
    ]
    //...
}

最后,在代码中使用process.env.API_HOST获取API地址即可,并且打包时使用npm run devnpm run build指定环境。比如,我们可以在package.json文件中添加以下配置:

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "build:test": "cross-env NODE_ENV=development webpack --progress --hide-modules --config build/webpack.prod.conf.js",
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules --config build/webpack.prod.conf.js",
    //...
 }

这样,当我们执行npm run build:test时,代码将会按照测试环境的配置打包到指定目录中;当执行npm run build时,则会按照正式环境的配置打包到相应目录中。

示例:
例如,在代码中需要获取API地址,我们可以这样写:

const API_HOST = process.env.API_HOST

可以在不同环境中输出不同的结果:

在测试环境中,API_HOST的值是http://localhost:8080
在正式环境中,API_HOST的值是http://www.example.com

这样就能在不同环境中正确获取API地址,实现不同环境的打包了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue.js根据不同环境(正式、测试)打包到不同目录 - Python技术站

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

相关文章

  • js+HTML5 canvas 实现简单的加载条(进度条)功能示例

    下面是详细讲解“js+HTML5 canvas 实现简单的加载条(进度条)功能示例”的完整攻略。 1. 准备工作 首先准备好需要的HTML文件和JS文件。其中HTML文件中包含一个画布(canvas)的标签,用于绘制进度条,具体代码如下: <!DOCTYPE html> <html> <head> <meta cha…

    Vue 2023年5月28日
    00
  • vue parseHTML函数解析器遇到结束标签

    当vue parseHTML函数解析器在解析HTML代码时遇到结束标签时,会执行以下操作: 检查栈顶元素是否与该结束标签匹配。如果匹配,则将该元素从栈中弹出并创建该元素的VNode节点。 如果不匹配,则会触发错误,并终止解析过程。这通常是由于某个开始标签没有对应的结束标签造成的。 下面是两个示例,以说明解析结束标签的过程。 示例 1:匹配结束标签 假设HTM…

    Vue 2023年5月27日
    00
  • Vue2中无法检测到数组变动的原因及解决

    当我们使用 Vue2 中的响应式系统时,可以通过 Vue.set 或者直接修改一个数组中的元素来触发视图的更新。但是,如果我们使用数组的方法(比如 push、pop、shift、unshift、splice、sort 或者 reverse)去修改数组,Vue2 中是无法直接检测到数组变动的,这是因为 Vue2 的响应式系统是通过 Object.defineP…

    Vue 2023年5月28日
    00
  • Springboot vue导出功能实现代码

    那我为您详细讲解一下“Springboot vue导出功能实现代码”的完整攻略。 1. 环境准备 首先需要准备好以下环境: JDK 8+ Maven 3+ Vue.js 2+ Element-UI 2+ axios 0.19+ 2. 前端实现 在前端页面中,我们需要添加一个导出按钮,当用户点击该按钮时,触发导出操作。 <el-button type=&…

    Vue 2023年5月27日
    00
  • Django+Vue实现WebSocket连接的示例代码

    下面是详细的 Django+Vue 实现 WebSocket 连接的步骤和示例代码。 环境准备 Django 首先需要安装 Django 框架和 Django Channels 库,采用 pip 进行安装: pip install Django pip install channels Vue Vue 需要安装 Vue CLI,用于创建 Vue 项目,并安装…

    Vue 2023年5月28日
    00
  • vue2源码解析之全局API实例详解

    “vue2源码解析之全局API实例详解”是一篇深入分析Vue.js源码的文章,主要介绍了Vue.js全局API的相关实例,为读者深入了解Vue.js源码提供了基础。 本文主要涉及到Vue.js的全局API实例,包括Vue.extend、Vue.nextTick、Vue.set、Vue.delete等。其中,Vue.extend用于创建具有复用性的组件构造器;…

    Vue 2023年5月27日
    00
  • Vue 动态路由的实现详情

    下面就为大家详细讲解一下「Vue 动态路由的实现详情」。 什么是动态路由? Vue 路由是一种 URL 和组件之间的映射关系,并通过 URL 触发组件的展示。而动态路由则是在 URL 中传递参数,根据参数的不同动态匹配相应的路由。例如 /article/1 和 /article/2 都可以匹配到文章详情页路由,只不过参数不同。在 Vue 中,我们可以通过“路…

    Vue 2023年5月28日
    00
  • vue使用高德地图根据坐标定位点的实现代码

    这里我会给出一个使用 Vue.js 实现在地图上根据坐标定位点的完整攻略。 确定需求 首先,我们需要确定自己的需求和目标,比如:我们需要在网站上呈现一些地图数据,并使用高德地图 API 在地图上显示坐标点。以下是我们要用到的高德地图 API: Web 服务 API,用于获取高德地图中的各种数据。 JavaScript API,用于在网页上显示高德地图,并在地…

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