UNPKG

vue-cli-plugin-app-config

Version:

一个vue项目配置文件管理的解决方案,可方便开发者在本地环境/测试环境/投产环境等多种配置里面快速切换

90 lines (72 loc) 2.14 kB
var path = require('path') var webpack = require('webpack') // 默认配置 var $defaultConfig = { env: { dev: {} }, common: {} } module.exports = (api, options) => { // 容错处理 options.pluginOptions ? '' : options.pluginOptions = {} // 混入配置文件 let mergeConfig = (args) => { // 获取插件配置 let pluginOptions = options.pluginOptions['app-config'] || { file: './app.config.js', default: 'dev', outputprefix: 'dist' } // 获取配置文件 let $allConfig = require(path.resolve(pluginOptions.file)) || {} // 合并默认配置 $allConfig = Object.assign($defaultConfig, $allConfig) // 获取环境, 使用插件默认配置 or dev let envtype = pluginOptions.default || 'dev' // 判断启动时是否有携带参数 if (args.length > 0) { for (let key of args) { if ($allConfig.env[key.replace('--', '')]) envtype = key.replace('--', '') } } // 混入参数 let $config = { // 混入通用的配置 ...$allConfig.common || {}, // 混入当前环境配置 ...$allConfig.env[envtype] || {}, // 注入当前环境标识 env: envtype } try { if (pluginOptions.includePackage) { var package = require(path.resolve('./package.json')) $config.package = package || { error: 'package.json not find' } } } catch (e) {} // 混入全局的webpack中 api.configureWebpack(webpackConfig => { // 注入到webpack全局配置当中 return { plugins: [ new webpack.DefinePlugin({ $config: JSON.stringify($config) }) ] } }) console.info('\n global $config use ' + envtype + ' mode \n') } // 获取启动参数 let argv = [] // 过滤保留--前缀的参数 let npm_config_argv = process.argv || [] for (let arg of npm_config_argv) { if (arg.indexOf('--') >= 0) argv.push(arg) } // 合并配置文件 mergeConfig(argv) }