此文章用來解釋vue-cli腳手架build目錄中的webpack.base.conf.js配置文件
- 此配置文件是vue開發環境的wepack相關配置文件,主要用來處理各類文件的配置
- 關於註釋
- 當涉及到較複雜的解釋我將經過標識的方式(如(1))將解釋寫到單獨的註釋模塊,請自行查看
- 上代碼
// 引入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之類的和樣式有關的loader
// 詳情請看(1)
var 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]')
}
}
]
}
}
解釋
(1)下面是vue-loader.conf.js配置文件的解釋,若是你看過我關於utils的解釋,下面很好懂
// utils配置文件用來解決css相關文件loader
var utils = require('./utils')
// 生產和開發環境的相關屬性
var config = require('../config')
// 判斷當前是否生產環境
var isProduction = process.env.NODE_ENV === 'production'
module.exports = {
// 調用utils配置文件中的cssLoaders方法,用來返回配置好的css-loader和vue-style-loader
loaders: utils.cssLoaders({
sourceMap: isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap, // 這一句話表示如何生成map文
extract: isProduction // 這一項是自定義配置項,設置爲true表示生成單獨樣式文件
})
}