webpack 3 + Vue2 使用dotenv配置多环境

本文介绍了如何在webpack3与Vue2项目中利用dotenv管理多环境变量,包括引入库、创建.env文件、配置代理和在Vue文件中使用环境变量的详细步骤。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

webpack 3 + Vue2 使用dotenv方式配置多环境


一、dotenv

它能将环境变量中的变量从 .env 文件加载到 process.env 中

二、使用步骤

1.引入库

yarn add dotenv --dev 

2.添加.env文件

这里会添加.env .env.dev .env.dev.local .env.production
一般情况.env.dev.local 是不会提交到git的
会按照这个顺序覆盖环境变量的值 .env.*.local > .env.* > .env

# port
VUE_PORT = 3200

# 应用接口上下文
VUE_APP_CONTEXT_NEW = /CONT

# API请求前缀 
VUE_APP_API_PREFIX = /apis

VUE_PUBILIC_PATH = site

# 当运行 vue-cli-service build 时生成的生产环境构建文件的目录。
VUE_OUTPUT_DIR = site

#  放置生成的静态资源 (js、css、img、fonts) 的目录(相对于outputDir目录)。
VUE_ASSETSDIR = static

# 指定生成的 
VUE_INDEX_PATH = index.html

VUE_PROXY = {"/apis": "http://192.168.1.10:8089"}

3.修改代理配置

修改config/indes.js,这个文件要根据自己的配置去找。

const dotenv = require("dotenv");
const fs = require("node:fs");

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
const pathsDotenv = resolveApp(".env");

dotenv.config({ path: `${pathsDotenv}.${process.env.NODE_ENV}.local` });
dotenv.config({ path: `${pathsDotenv}.${process.env.NODE_ENV}` });
dotenv.config({ path: pathsDotenv });

console.log("【process.env.VUE_PORT】", process.env.VUE_PORT);
console.log("【process.env.VUE_PROXY】", process.env.VUE_PROXY);

const createProxy = obj => {
  const ret = {};
  const httpsRE = /^https:\/\//;
  if (obj) {
    obj = JSON.parse(obj);
    for (const prefix in obj) {
      const target = obj[prefix];
      const isHttps = httpsRE.test(target);

      ret[prefix] = {
        target: target,
        changeOrigin: true,
        ws: true,
        pathRewrite: path => path.replace(new RegExp(`^${prefix}`), ""),
        ...(isHttps ? { secure: false } : {})
      };
    }
  }
  console.debug(ret);
  return ret;
};

....
// 这个地方可以使用函数方式,都一样,改proxyTable就可以了。
module.exports = {
  dev: {
  	....
 	proxyTable: createProxy(process.env.VUE_PROXY)
 	....
 }
}
....

4.vue文件中如何使用环境变量

修改 webpack.base.conf.js
需要哪些变量就配置

new webpack.DefinePlugin({
  "process.env": {
    NODE_ENV: JSON.stringify(process.env.NODE_ENV || "development"),
    VUE_APP_CONTEXT: JSON.stringify(
      process.env.VUE_APP_CONTEXT || "/CONTEXT"
    ),
    VUE_APP_API_PREFIX: JSON.stringify(
      process.env.VUE_APP_API_PREFIX || "/contextapi"
    )
  }
}),

总结

env文件在配置文件都可以用, vue页面用的时候需要在 webpack.base.conf.js 重新配置。

<think>好的,我现在需要帮助用户了解如何在Vue2项目中实际配置Webpack。首先,我得回想一下Vue2Webpack的关系。Vue CLI 3之前,比如Vue CLI 2,确实默认使用Webpack作为构建工具,但随着Vue CLI的发展,Vue CLI 3及以上版本隐藏了Webpack的具体配置,改为通过vue.config.js来暴露配置项。但用户可能是在维护一个旧项目,或者需要更细粒度的控制,所以需要手动配置Webpack。 首先,用户可能已经有一个基于Vue2的项目,可能使用Vue CLI创建,也可能需要从头开始配置。我需要分步骤讲解如何配置。可能要从安装必要的依赖开始,比如vuewebpackwebpack-cli、webpack-dev-server,以及相关的loader,比如babel-loader、css-loader、vue-loader等。需要注意版本兼容性,因为Vue2可能对某些loader的版本有要求,比如vue-loader需要15.x版本,而Vue3可能需要更高版本。 接下来是配置文件的创建,webpack.config.js的基本结构。需要配置entry、output、module.rules来处理不同类型的文件,比如.js.vue.css等。对于Vue单文件组件,必须使用vue-loader,并需要引入VueLoaderPlugin,这一点容易遗漏,导致错误。 然后,可能需要配置devServer,设置开发服务器的端口、热更新等。另外,处理静态资源可能需要配置file-loader或url-loader,特别是图片、字体等文件。对于生产环境配置,可能需要区分开发和生产模式,使用不同的优化策略,比如代码压缩、提取公共代码等。 还需要考虑如何处理CSS预处理器,比如Sass或Less,这时候需要安装相应的loader,并在规则中添加对应的配置。另外,Babel的配置也是必须的,确保ES6+语法能正确转译,可能需要配置.babelrc文件,指定presets,比如@babel/preset-env。 可能还要提到如何通过vue.config.js来覆盖或扩展Webpack配置,如果用户的项目是基于Vue CLI创建的,这样他们可以更方便地调整配置,而无需直接修改webpack.config.js。比如使用chainWebpack或configureWebpack选项。 另外,需要注意一些常见的问题,比如别名(alias)的配置,使得在项目中可以使用@指向src目录,这在Vue项目中很常见。还有,如何处理环境变量,可能需要使用dotenv或者Webpack的DefinePlugin来注入不同环境下的变量。 最后,可能需要给出一个完整的配置示例,帮助用户整合各个部分。同时提醒用户在实际项目中可能遇到的坑,比如版本冲突、loader顺序问题、插件配置错误等,以及如何调试这些问题,比如查看Webpack构建输出的详细日志,使用vue inspect命令检查配置等。 总结下来,我需要分步骤讲解如何从零配置Webpack,包括安装依赖、配置文件结构、处理各种文件类型、开发服务器配置、生产优化、使用Vue CLI的配置方式,以及常见问题处理。确保用户能够理解每个配置项的作用,并且能够在实际项目中应用这些配置。</think>在Vue2项目中手动配置Webpack的步骤如下(针对非Vue CLI项目或需要深度定制的场景): --- ### 一、基础环境搭建 ```bash # 初始化项目 npm init -y # 安装Vue2核心 npm install vue@2.x # 安装Webpack核心 npm install webpack@4.x webpack-cli@3.x webpack-dev-server@3.x --save-dev # 安装必要loader npm install vue-loader@15.x vue-template-compiler@2.x --save-dev npm install css-loader@3.x style-loader@2.x file-loader@6.x --save-dev npm install babel-loader@8.x @babel/core@7.x @babel/preset-env@7.x --save-dev ``` --- ### 二、配置文件结构 ``` project/ ├── src/ │ ├── main.js # 入口文件 │ ├── App.vue # 根组件 │ └── components/ # 组件目录 ├── public/ │ └── index.html # HTML模板 ├── webpack.config.js # Webpack配置 └── .babelrc # Babel配置 ``` --- ### 三、核心配置文件示例 #### 1. webpack.config.js ```javascript const { VueLoaderPlugin } = require(&#39;vue-loader&#39;) const path = require(&#39;path&#39;) module.exports = { entry: &#39;./src/main.js&#39;, output: { path: path.resolve(__dirname, &#39;dist&#39;), filename: &#39;bundle.js&#39; }, module: { rules: [ { test: /\.vue$/, loader: &#39;vue-loader&#39; }, { test: /\.js$/, exclude: /node_modules/, use: { loader: &#39;babel-loader&#39;, options: { presets: [&#39;@babel/preset-env&#39;] } } }, { test: /\.css$/, use: [&#39;style-loader&#39;, &#39;css-loader&#39;] }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: &#39;file-loader&#39;, options: { name: &#39;img/[name].[hash:7].[ext]&#39; } } ] }, plugins: [new VueLoaderPlugin()], devServer: { contentBase: path.join(__dirname, &#39;public&#39;), port: 8080, hot: true, open: true }, resolve: { alias: { &#39;@&#39;: path.resolve(__dirname, &#39;src&#39;) // 配置路径别名 } } } ``` #### 2. .babelrc ```json { "presets": ["@babel/preset-env"] } ``` --- ### 四、关键配置说明 1. **Vue单文件组件处理** - `vue-loader`需配合`VueLoaderPlugin`使用 - 必须安装匹配版本的`vue-template-compiler` 2. **路径别名配置** ```javascript resolve: { alias: { &#39;@&#39;: path.resolve(__dirname, &#39;src&#39;), &#39;assets&#39;: path.resolve(__dirname, &#39;src/assets&#39;) } } ``` 3. **扩展CSS预处理** ```bash npm install sass-loader@10.x sass --save-dev ``` ```javascript { test: /\.scss$/, use: [&#39;style-loader&#39;, &#39;css-loader&#39;, &#39;sass-loader&#39;] } ``` --- ### 五、Vue CLI项目定制配置 如果使用Vue CLI创建的项目,在根目录创建`vue.config.js`: ```javascript module.exports = { configureWebpack: { // 直接合并到Webpack配置 resolve: { alias: { &#39;@components&#39;: &#39;@/components&#39; } } }, chainWebpack: config => { // 链式操作高级配置 config.module .rule(&#39;images&#39;) .use(&#39;url-loader&#39;) .loader(&#39;url-loader&#39;) .tap(options => ({ ...options, limit: 10240 // 修改图片base64阈值 })) } } ``` --- ### 六、生产环境优化 1. **代码分割** ```javascript optimization: { splitChunks: { chunks: &#39;all&#39;, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: &#39;vendors&#39;, chunks: &#39;all&#39; } } } } ``` 2. **添加hash文件名** ```javascript output: { filename: &#39;[name].[contenthash:8].js&#39; } ``` --- ### 七、常见问题排查 1. **版本兼容问题** - Vue2建议使用Webpack4 - `vue-loader@15`需要配合`VueLoaderPlugin` 2. **组件导入路径** ```javascript // 正确写法 import MyComponent from &#39;@/components/MyComponent.vue&#39; ``` 3. **热更新失效** ```javascript devServer: { hot: true, inline: true } ``` --- 通过以上配置,可以构建出支持Vue2完整功能的Webpack工程化环境。建议优先使用Vue CLI创建项目,需要定制时再通过`vue.config.js`进行扩展配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值