如何作到在webpack打包vue項目後,在外部動態修改配置文件

在咱們作完vue項目後,只須要執行 npm run dist 就能夠輕鬆進行打包轉測試,但是若是咱們臨時須要修改一些配置文件好比域名,這時候咱們就有點懵逼了,那就修改了再從新打一次包? NO NO NO,讓咱們一塊兒來探索如何解決這個問題吧。vue

首先咱們須要藉助一個插件 generate-asset-webpack-pluginwebpack

npm install generate-asset-webpack-plugin --save-dev

其次在build文件夾下創建一個generate-asset.config.js文件web

const GenerateAssetPlugin = require('generate-asset-webpack-plugin'); const config = require('../config/app-config'); function createServerConfig(compilation){ return JSON.stringify( Object.assign({ _hash: compilation.hash },config) ) } module.exports = () =>{ return new GenerateAssetPlugin({ filename: 'config/app-config.json', fn: (compilation, cb) => { cb(null, createServerConfig(compilation)); } }) }

在config文件夾下創建一個app.config.js文件導出配置選項npm

module.exports={ env:"dev", baseUrl:"http://www.baidu.com" }

在webpack.base.conf.js文件中引入generateAssetAppConfigjson

let webpackConfig = { context: path.resolve(__dirname, '../'), entry: { app: './src/main.js' }, plugins:[ generateAssetAppConfig(packageConfig) ], output: { path: config.build.assetsRoot, filename: '[name].js', publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath : config.dev.assetsPublicPath }, resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), } },

寫一個請求外部app-config.json文件的方法app

let get= function(url){ return new Promise((resolve,reject)=>{ let xhr= new XMLHttpRequest(); xhr.open('get',url,true); xhr.onload=function(){ if(xhr.status==200){ resolve(JSON.parse(xhr.responseText)); }else{ reject(null); } } xhr.onerror = function(){ reject(null); } xhr.send(null); }); } export default{ getConfig(){ return get('/config/app-config.json'); } }

在main.js中引入請求的方法測試

outConfig.getConfig() .then(res=>{ Object.assign(config,res) }).catch(err=>{})

最後執行 npm run dist後能夠獲得以下目錄ui

最後能夠修改config中json文件裏的配置文件。url

相關文章
相關標籤/搜索