在我们做完vue项目后,只需要执行 npm run dist 就可以轻松进行打包转测试,可是如果我们临时需要修改一些配置文件比如域名,这时候我们就有点懵逼了,那就修改了再重新打一次包? NO NO NO,让我们一起来探索如何解决这个问题吧。

首先我们需要借助一个插件 generate-asset-webpack-plugin

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

其次在build文件夹下建立一个generate-asset.config.js文件

  1. const GenerateAssetPlugin = require('generate-asset-webpack-plugin');
  2. const config = require('../config/app-config');
  3.  
  4. function createServerConfig(compilation){
  5. return JSON.stringify(
  6. Object.assign({
  7. _hash: compilation.hash
  8. },config)
  9. )
  10. }
  11.  
  12. module.exports = () =>{
  13. return new GenerateAssetPlugin({
  14. filename: 'config/app-config.json',
  15. fn: (compilation, cb) => {
  16. cb(null, createServerConfig(compilation));
  17. }
  18. })
  19. }

在config文件夹下建立一个app.config.js文件导出配置选项

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

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

  1. let webpackConfig = {
  2. context: path.resolve(__dirname, '../'),
  3. entry: {
  4. app: './src/main.js'
  5. },
  6. plugins:[
  7. generateAssetAppConfig(packageConfig)
  8. ],
  9. output: {
  10. path: config.build.assetsRoot,
  11. filename: '[name].js',
  12. publicPath: process.env.NODE_ENV === 'production'
  13. ? config.build.assetsPublicPath
  14. : config.dev.assetsPublicPath
  15. },
  16. resolve: {
  17. extensions: ['.js', '.vue', '.json'],
  18. alias: {
  19. 'vue$': 'vue/dist/vue.esm.js',
  20. '@': resolve('src'),
  21. }
  22. },

写一个请求外部app-config.json文件的方法

  1. let get= function(url){
  2. return new Promise((resolve,reject)=>{
  3. let xhr= new XMLHttpRequest();
  4. xhr.open('get',url,true);
  5. xhr.onload=function(){
  6. if(xhr.status==200){
  7. resolve(JSON.parse(xhr.responseText));
  8. }else{
  9. reject(null);
  10. }
  11. }
  12. xhr.onerror = function(){
  13. reject(null);
  14. }
  15. xhr.send(null);
  16. });
  17. }
  18.  
  19. export default{
  20. getConfig(){
  21. return get('/config/app-config.json');
  22. }
  23. }

在main.js中引入请求的方法

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

最后执行 npm run dist后可以得到如下目录

最后可以修改config中json文件里的配置文件。

如何做到在webpack打包vue项目后,在外部动态修改配置文件的更多相关文章

  1. 16.如何做到webpack打包vue项目后,可以修改配置文件

    问题描述: 前端需要修改restful API的url,但是打包之后,配置文件找不到了,如果在npm run build 生成dist后,这个配置也被写死了,传到运行的前端服务器上后,假设某次,api ...

  2. 解决webpack打包vue项目后,部署完成后,刷新页面页面404

    1.url不动式url完全不动,即你的页面怎么改变,怎么跳转url都不会改变.这种情况的原理 就是纯ajax拿到页面后替换原页面中的元素,刷新页面就是首页 2.带hash(#)式这种相对于第一种的话刷 ...

  3. webpack打包vue项目之后生成的dist文件该怎么启动运行

    亲测,webpack打包vue项目之后生成的dist文件可以部署到 express 服务器上运行. 我的vue项目结构如下: 1. 进入该vue项目目录,打开git bash,执行:npm run b ...

  4. vue项目--favicon设置以及动态修改favicon

    最近写公司项目时,动态更新favicon 动态更新之前需要有一个默认的favicon. 目前vue-cli搭建的vue项目里面已经有了一个static文件夹,存放静态文件. favicon图片放到该文 ...

  5. webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

    资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...

  6. webpack打包vue项目之后怎么启动&注意事项

    参考路径:https://blog.csdn.net/cn_yaojin/article/details/80164477 参考路径:https://www.imooc.com/article/323 ...

  7. 教你用Cordova打包Vue项目

    现在国内越来越多的开发者使用Vue开发混合app,但是当大家开发完成过后才发现不知道该怎么将Vue项目打包成app. 据我现在的了解打包Vue项目目前流行的就是使用weex和cordova.weex是 ...

  8. webpack打包vue单文件组件

    一.vue单文件组件 ①文件扩展名为 .vue 的 就是single-file components(单文件组件) ②参考文档:单文件组件 二.webpack加载第三方包 ①项目中,如果需要用到一些第 ...

  9. electron打包vue项目

    electron是什么 Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并 ...

随机推荐

  1. Python开发【1.4数据类型】

    1.数字 数字数据类型用于存储数值. 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象. # 创建对象 var1 = 1 var2 = 2 # 删除对象 del var1 del ...

  2. Swift 1.1语言第7章 函数和闭包

    Swift 1.1语言第7章  函数和闭包 在编程中,随着处理问题的越来越复杂.代码量飞速添加. 当中,大量的代码往往相互反复或者近似反复.假设不採有效方式加以解决.代码将非常难维护. 为了解决问题, ...

  3. 使用Zabbix监控ZooKeeper服务的健康状态

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  4. SepicalJudge

    原文:http://www.cnblogs.com/chouti/p/5752819.html Special Judge:当正确的输出结果不唯一的时候需要的自定义校验器 首先有个框架 #includ ...

  5. FreeMarker:模板开发指南

    ylbtech-FreeMarker:模板开发指南 1.返回顶部 1. Section Contents 入门 模板 + 数据模型 = 输出 数据模型一览 模板一览 数值,类型 基本内容 类型 模板 ...

  6. C的结构体函数

    #include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...

  7. bzoj3339

    线段树+离线 这种题既可以用莫队做也可以用线段树做,跟hh的项链差不多 首先我们处里出前缀mex,也就是1->i的mex值,再预处理出每个数下一次出现的位置,然后把每个前缀mex插入线段树,每个 ...

  8. J20170604-hm

    丸める   四舍五入 文字化け 乱码 わきまえる 弁える 辨别,识相 御構い 张罗,招待,款待 お構いなしに 不加考虑 しおり ブックマーク 书签 スタイルシート 样式表

  9. linux下导入oracle数据表

    提前说明:这个是默认oracle已经安装好切数据库默认表空间已经创建好.之后将数据表dmp文件直接导入到默认表空间里(默认表空间不用再指定,因为创建数据库时已经指定默认表空间) linux命令如下: ...

  10. bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛【二分+贪心】

    二分答案,贪心判定 #include<iostream> #include<cstdio> #include<algorithm> using namespace ...