vue-cli 4x vue.config.js配置-vue单文件的调试技巧

1, 前言

  1. 之前一直用的是 vue init webpack my-project 创建项目
    2.基础项目的结构也很完善
  2. 最近又看了遍 vue-cli 发现用法不太一样,就玩了下
  3. 首先刚开始用的时候我内心也是排斥的,毕竟新版 默认创建的话 比较空空如也
    但是要拥抱变化嘛, 发现可取之处,从0开始搭建结构,有助于对整个项目, 脚手架都有更深的认识
  4. 简单的不同点罗列如下
  5. 准备工作
 //淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org 
// 默认安装最新的 4x
npm install -g @vue/cli 
// 查看版本
vue -V

2. 图形化创建界面

vue  ui

没啥好说的, 都是中文,一路向下就行
值得说的就是这里 可以 选择选用 vue2 还是vue3
也可以手动配置依赖 ,这个比较简单就不详细说了

导入项目
配置项目
依赖安装
目录配置
打包配置
任务界面 可以查看 指令的配置
都是中文 自己研究


3. 指令 默认创建

--vue create 后跟项目名字
这种创建方式 和 react 就保持一致了

vue create hello-world

4. 选择一些配置的 指令创建

  1. 终端进入到你想保存项目的 目录
  2. vue create yzs-cli-4
  3. 选择 Manually select features 代表自己配置不用默认的
  4. 选择 安装的依赖 上下键 选择 空格 代表选中 比如Babel vuex router css预处理器

5.2.x vue版本选择
6.history mode 输入 n 代表不需要

  1. 选择 css预处理器 , 根据自己的需要选择 less sass

8.ESLint默认

  1. 什么启用ESLint 保存的时候还是 提交的时候,验证

不选 空号切换选中和不选 如果不选的话会自动生成一个vue.config.js文件

  1. 后面都直接回车就行了
    .... 等待安装成功 成功后 看提示

11.cd 进入到 项目根目录
12.npm run
记住 进入 项目根目录 在执行相关指令


5. 以前的 目录结构大概样子

1.png

6. 现在的 4x的 默认结构

1.png

7. 空空如也

所以 这个我们需要在这个项目的根目录创建 vue.config.js文件 就是和 package.json文件同级
上图中的vue.config.js是我手动创建的

8. 如果是自己手动配置的,会多些 store router 等文件夹


9. 单文件组件的单独运行调试配置

  1. 全局安装配置
npm i -g @vue/cli-service-global

  1. 在想要运行的vue文件目录 执行指令
vue serve my.vue
1.png

10. vue.config.js 常用配置

可以简单的理解成以前所有 webpack 的配置都融合到一起放这里了
当然你也可以 自己创建 webpack模块 在这 vue.config.js 文件引入

const path = require('path')
const CompressionPlugin = require('compression-webpack-plugin')

function resolve(dir) {
  return path.join(__dirname, dir)
}

// vue.config.js
module.exports = {
  /*
    Vue-cli3:
    Crashed when using Webpack `import()` #2463
    https://github.com/vuejs/vue-cli/issues/2463
   */
  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
  productionSourceMap: false,
  // 打包app时放开该配置
  publicPath: '/v1/myapp',
  configureWebpack: config => {
    // 生产环境取消 console.log
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
      // 打包文件大小配置
      config['performance'] = {
        'maxEntrypointSize': 10000000,
        'maxAssetSize': 30000000
      }
    }
  },
  chainWebpack: (config) => {
    config.resolve.alias
      .set('@$', resolve('src'))
      .set('@api', resolve('src/api'))
      .set('@assets', resolve('src/assets'))
      .set('@comp', resolve('src/components'))
      .set('@views', resolve('src/views'))

    // 生产环境,开启js\css压缩
    if (process.env.NODE_ENV === 'production') {
        config.plugin('compressionPlugin').use(new CompressionPlugin({
          test: /\.(js|css|less)$/, // 匹配文件名
          threshold: 10240, // 对超过10k的数据压缩
          deleteOriginalAssets: false // 不删除源文件
        }))
    }

    // 配置 webpack 识别 markdown 为普通的文件
    config.module
      .rule('markdown')
      .test(/\.md$/)
      .use()
      .loader('file-loader')
      .end()

    // 编译vxe-table包里的es6代码,解决IE11兼容问题
    config.module
      .rule('vxe')
      .test(/\.js$/)
      .include
        .add(resolve('node_modules/vxe-table'))
        .add(resolve('node_modules/vxe-table-plugin-antd'))
        .end()
      .use()
      .loader('babel-loader')
      .end()
  },

  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          /* less 变量覆盖,用于自定义 ant design 主题 */
          'primary-color': '#1890FF',
          'link-color': '#1890FF',
          'border-radius-base': '4px'
        },
        javascriptEnabled: true
      }
    },
    extract: process.env.NODE_ENV === 'production' ? {
      ignoreOrder: true
    } : false
  },
  pluginOptions: {
    'style-resources-loader': {
      preProcessor: 'less',
      patterns: [path.resolve(__dirname,"src/assets/style/common.less")]
    }
  },
  devServer: {
    disableHostCheck: true,
    port: 3000,
   open: true,// 自动打开浏览器
    proxy: {
// 代理可以配置多个
     /* '/api': {
        target: 'https://mock.xxx.xxx/mock/xxxxxx1263636/antd-pro', //mock API接口系统
        ws: false,
        changeOrigin: true,
        pathRewrite: {
          '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
        }
      }, */
      '/mine-boot': {
        target: 'https://localhost:443', // 请求本地 需要jeecg-boot后台项目
        ws: false,
        changeOrigin: true
      }
    }
  },

  // 关闭每次保存代码都进行eslint检验
  lintOnSave: false
}


参考资料

vue-cli


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351