最近使用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]') } } ] } }