webpack.base.conf.js配置文件---VUE筆記(1)

最近使用VUE作項目,偶遇不懂,,便作個詳細記錄css

此文檔是基於vue init webpack  XXX建立的最基礎的配置文件vue

// 引入nodejs路徑模塊
var path = require('path')
// 引入utils工具模塊,具體查看個人博客關於utils的解釋,utils主要用來處理css-loader和vue-style-loader的
var utils = require('./utils')
// 引入config目錄下的index.js配置文件,主要用來定義一些開發和生產環境的屬性
var config = require('../config')
// vue-loader.conf配置文件是用來解決各類css文件的,定義了諸如css,less,sass之類的和樣式有關的loadervar vueLoaderConfig = require('./vue-loader.conf')
// 此函數是用來返回當前目錄的平行目錄的路徑,由於有個'..'
function resolve (dir) {
  return path.join(__dirname, '..', dir)
}
module.exports = {
  entry: {
    // 入口文件是src目錄下的main.js
    app: './src/main.js'
  },
  output: {
    // 路徑是config目錄下的index.js中的build配置中的assetsRoot,也就是dist目錄
    path: config.build.assetsRoot,
    // 文件名稱這裏使用默認的name也就是main
    filename: '[name].js',
    // 上線地址,也就是真正的文件引用路徑,若是是production生產環境,其實這裏都是 '/'
    publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },
  resolve: {
    // resolve是webpack的內置選項,顧名思義,決定要作的事情,也就是說當使用 import "jquery",該如何去執行這件事
    // 情就是resolve配置項要作的,import jQuery from "./additional/dist/js/jquery" 這樣會很麻煩,能夠起個別名簡化操做
    extensions: ['.js', '.vue', '.json'], // 省略擴展名,也就是說.js,.vue,.json文件導入能夠省略後綴名,這會覆蓋默認的配置,因此要省略擴展名在這裏必定要寫上
    alias: {
      //後面的$符號指精確匹配,也就是說只能使用 import vuejs from "vue" 這樣的方式導入vue.esm.js文件,不能在後面跟上 vue/vue.js
      'vue$': 'vue/dist/vue.esm.js',
      // resolve('src') 其實在這裏就是項目根目錄中的src目錄,使用 import somejs from "@/some.js" 就能夠導入指定文件,是否是很高大上
      '@': resolve('src')
    }
  },
  // module用來解析不一樣的模塊
  module: {
    rules: [
      {
        test: /\.(js|vue)$/,
        // 也就是說,對.js和.vue文件在編譯以前進行檢測,檢查有沒有語法錯誤
        loader: 'eslint-loader',
        // 此選項指定enforce: 'pre'選項能夠確保,eslint插件可以在編譯以前檢測,若是不添加此項,就要把這個配置項放到末尾,確保第一個執行
        enforce: 'pre',
        // include選項指明這些目錄下的文件要被eslint-loader檢測,還有一個exclude表示排除某些文件夾
        include: [resolve('src'), resolve('test')],
        // options表示傳遞給eslint-loader的參數
        options: {
          // formatter是參數的名稱,eslint-friendly-formatter是eslint的一個報告總結插件,也就是說eslint的檢測
          報告很是難看懂,這個插件就是整理這些報告方便查閱的
          formatter: require('eslint-friendly-formatter')
        }
      },
      {
        test: /\.vue$/,
        // 對vue文件使用vue-loader,該loader是vue單文件組件的實現核心,專門用來解析.vue文件的
        loader: 'vue-loader',
        // 將vueLoaderConfig當作參數傳遞給vue-loader,就能夠解析文件中的css相關文件
        options: vueLoaderConfig
      },
      {
        test: /\.js$/,
        // 對js文件使用babel-loader轉碼,該插件是用來解析es6等代碼
        loader: 'babel-loader',
        // 指明src和test目錄下的js文件要使用該loader
        include: [resolve('src'), resolve('test')]
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        // 對圖片相關的文件使用 url-loader 插件,這個插件的做用是將一個足夠小的文件生成一個64位的DataURL
        // 可能有些老鐵還不知道 DataURL 是啥,當一個圖片足夠小,爲了不單獨請求能夠把圖片的二進制代碼變成64位的
        // DataURL,使用src加載,也就是把圖片當成一串代碼,避免請求,神不神奇??
        loader: 'url-loader',
        options: {
          // 限制 10000 個字節一下的圖片才使用DataURL
          limit: 10000,
          // 下面這個應該是指將[name].[hash:7].[ext]對應的圖片使用url-loader測試吧,這個我是真不知道幹啥的,若是知道
          // 的兄弟,必定要留言給我啊,拜謝
          name: utils.assetsPath('img/[name].[hash:7].[ext]') // 這個函數執行結果是 /img/[name].[hash:7].[ext]
          // 不知道吧 name 設置成 /img/[name].[hash:7].[ext] 意欲何爲,猜想應該是輸出圖片的路徑或者是解析圖片的路徑
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        // 字體文件處理,和上面同樣
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      }
    ]
  }
}
相關文章
相關標籤/搜索