如何配置 vue-cli 3.0 的 vue.config.js

vue-cli 3 英文文檔
vue-cli 3 中文文檔
webpack 4 plugins
webpack-chaincss

TLDRhtml

vue-cli 3 與 2 版本有很大區別vue

  1. vue-cli 3 的 github 倉庫由原有獨立的 github 倉庫遷移到了 vue 項目下
  2. vue-cli 3 的項目架構徹底拋棄了 vue-cli 2 的原有架構,3 的設計更加抽象和簡潔(此處後續能夠詳細介紹)
  3. vue-cli 3 是基於 webpack 4 打造,vue-cli 2 仍是 webapck 3
  4. vue-cli 3 的設計原則是「0配置」
  5. vue-cli 3 提供了 vue ui 命令,提供了可視化配置,更加人性化

因爲 vue-cli 3 也學習了 rollup 的零配置思路,因此項目初始化後,沒有了之前熟悉的 build 目錄,也就沒有了 webpack.base.config.js、webpack.dev.config.js 、webpack.prod.config.js 等配置文件。node

那麼,咱們該如何去配置本身的項目了?webpack

其實這一切都是由於 vue-cli 3 的項目初始化,幫開發者已經解決了 80% ,甚至絕大部分情形下的 webpack 配置。git

上述功能就是由 @vue/cli-service 依賴去處理,當你打開 node_modules 目錄下 @vue 中的 cli-service 看一眼,是否是找到了熟悉的感受?github

圖片描述

說了這麼多,開發者在實際開發過程當中,確定還有須要本身去修改配置的地方,那麼,該怎麼作了?web

這點就須要在項目根目錄下手動新建一個 vue.config.js,此處參考我提供的一個基礎模板:vue-cli

module.exports = {
  baseUrl: process.env.NODE_ENV === 'production'
    ? '//your_url'
    : '/',

  outputDir: 'dist',

  assetsDir: 'static',

  filenameHashing: true,

  // When building in multi-pages mode, the webpack config will contain different plugins
  // (there will be multiple instances of html-webpack-plugin and preload-webpack-plugin).
  // Make sure to run vue inspect if you are trying to modify the options for those plugins.
  pages: {
    index: {
      // entry for the pages
      entry: 'src/pages/index/index.js',
      // the source template
      template: 'src/pages/index/index.html',
      // output as dist/index.html
      filename: 'index.html',
      // when using title option,
      // template title tag needs to be <title><%= htmlWebpackPlugin.options.title %></title>
      title: '首頁',
      // chunks to include on this pages, by default includes
      // extracted common chunks and vendor chunks.
      chunks: ['chunk-vendors', 'chunk-common', 'index']
    }
    // when using the entry-only string format,
    // template is inferred to be `public/subpage.html`
    // and falls back to `public/index.html` if not found.
    // Output filename is inferred to be `subpage.html`.
    // subpage: ''
  },

  // eslint-loader 是否在保存的時候檢查
  lintOnSave: true,

  // 是否使用包含運行時編譯器的Vue核心的構建
  runtimeCompiler: false,

  // 默認狀況下 babel-loader 忽略其中的全部文件 node_modules
  transpileDependencies: [],

  // 生產環境 sourceMap
  productionSourceMap: false,

  // cors 相關 https://jakearchibald.com/2017/es-modules-in-browsers/#always-cors
  // corsUseCredentials: false,
  // webpack 配置,鍵值對象時會合並配置,爲方法時會改寫配置
  // https://cli.vuejs.org/guide/webpack.html#simple-configuration
  configureWebpack: (config) => {
  },

  // webpack 連接 API,用於生成和修改 webapck 配置
  // https://github.com/mozilla-neutrino/webpack-chain
  chainWebpack: (config) => {
    // 由於是多頁面,因此取消 chunks,每一個頁面只對應一個單獨的 JS / CSS
    config.optimization
      .splitChunks({
        cacheGroups: {}
      });

    // 'src/lib' 目錄下爲外部庫文件,不參與 eslint 檢測
    config.module
      .rule('eslint')
      .exclude
      .add('/Users/maybexia/Downloads/FE/community_built-in/src/lib')
      .end()
  },

  // 配置高於chainWebpack中關於 css loader 的配置
  css: {
    // 是否開啓支持 foo.module.css 樣式
    modules: false,

    // 是否使用 css 分離插件 ExtractTextPlugin,採用獨立樣式文件載入,不採用 <style> 方式內聯至 html 文件中
    extract: true,

    // 是否構建樣式地圖,false 將提升構建速度
    sourceMap: false,

    // css預設器配置項
    loaderOptions: {
      css: {
        // options here will be passed to css-loader
      },

      postcss: {
        // options here will be passed to postcss-loader
      }
    }
  },

  // All options for webpack-dev-server are supported
  // https://webpack.js.org/configuration/dev-server/
  devServer: {
    open: true,

    host: '127.0.0.1',

    port: 3000,

    https: false,

    hotOnly: false,

    proxy: null,

    before: app => {
    }
  },
  // 構建時開啓多進程處理 babel 編譯
  parallel: require('os').cpus().length > 1,

  // https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  pwa: {},

  // 第三方插件配置
  pluginOptions: {}
};

因此如今全部的問題都集中在了--- 我到底要怎麼樣去修改這個配置文件?babel

一些簡單的配置,好比多頁面、接口代理,你們能夠本身去看下官方 doc ,文章最上面有提供。

若是須要改動本來 webpack 的配置,該怎麼作了?

由於 vue-cli 3 中的 cli-service 對 webpack 4 引入了 webpack-chain 插件,同時對配置進行了高度抽象化,因此開發者想爲所欲爲的修改配置,操做方式就比之前更加難。在個人親身實踐下,總結了幾點,供你們參考:

首先,修改點主要位於 vue.config.js 中的

configureWebpack: (config) => {
// 簡單/基礎配置,好比引入一個新插件
},
chainWebpack: (config) => {
// 鏈式配置
}
loaderOptions: {
      css: {
        // options here will be passed to css-loader
      },
      postcss: {
        // options here will be passed to postcss-loader
      }
}

具體操做能夠看文章最上面的連接,此處再也不贅述。

核心一點就是: cmd 中敲 vue inspect > output.js , 這樣咱們會獲得一份最終生效的 webpack 配置信息,省去了你本身去看 cli-service 源碼。

而後,我舉個栗子:

個人項目中,須要修改 eslint 的配置,讓它不去檢測我項目下的 src/lib 目錄,由於這裏是外部庫文件(其實此處也能夠在項目中直接新建一個 .eslintignore文件去處理,但我這裏選擇修改 webpack 文件)

第一步: vue inspect > output.js
第二步: 在 output.js 中搜索 eslint 相關配置,結果以下:

圖片描述

第三步: 我肯定了我要修的是 exclude 配置項
第四步: 去 mozilla-neutrino/webpack-chain 全局搜 exclude,結果以下:

圖片描述

第五步: 由於 exclude 只出現了一次,微微一笑很傾城。可是我看到了 include,接着搜 include,結果以下:

圖片描述

第六步: 參考 include 的寫法,以此類推:

圖片描述

最後,咱們在 vue inspect > output.js 看一下,

圖片描述

done

總結一下,在多用幾回 webpack-chain 之後,相信我,你會發現不少規律,vue-cli 3 也就很簡單啦。

相關文章
相關標籤/搜索