vue-cli脚手架中webpack配置基础文件详解
一、前言
vue-cli是構建vue單頁應用的腳手架,輸入一串指定的命令行從而自動生成vue.js+wepack的項目模板。這其中webpack發揮了很大的作用,它使得我們的代碼模塊化,引入一些插件幫我們完善功能可以將文件打包壓縮,圖片轉base64等。后期對項目的配置使得我們對于腳手架自動生成的代碼的理解更為重要,接下來我將基于webpack3.6.0版本結合文檔將文件各個擊破,純干料。
重點章節點擊查看:package.json;config/index.js;webpack.base.conf.js;webpack.dev.conf.js;webpack.prod.conf.js
二、主體結構
├─build ├─config ├─dist ├─node_modules ├─src │ ├─assets │ ├─components │ ├─router │ ├─App.vue │ ├─main.js ├─static ├─.babelrc ├─.editorconfig ├─.gitignore ├─.postcssrc.js ├─index.html ├─package-lock.json ├─package.json └─README.md1、?package.json
項目作為一個大家庭,每個文件都各司其職。package.json來制定名單,需要哪些npm包來參與到項目中來,npm install命令根據這個配置文件增減來管理本地的安裝包。
{ //從name到private都是package的配置信息,也就是我們在腳手架搭建中輸入的項目描述"name": "shop",//項目名稱:不能以.(點)或者_(下劃線)開頭,不能包含大寫字母,具有明確的的含義與現有項目名字不重復"version": "1.0.0",//項目版本號:遵循“大版本.次要版本.小版本” "description": "A Vue.js project",//項目描述 "author": "qietuniu",//作者名字 "private": true,//是否私有 //scripts中的子項即是我們在控制臺運行的腳本的縮寫 "scripts": { //①webpack-dev-server:啟動了http服務器,實現實時編譯; //inline模式會在webpack.config.js入口配置中新增webpack-dev-server/client?http://localhost:8080/的入口,使得我們訪問路徑為localhost:8080/index.html(相應的還有另外一種模式Iframe); //progress:顯示打包的進度 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev",//與npm run dev相同,直接運行開發環境 "build": "node build/build.js"//使用node運行build文件 }, //②dependencies(項目依賴庫):在安裝時使用--save則寫入到dependencies "dependencies": { "vue": "^2.5.2",//vue.js "vue-router": "^3.0.1"//vue的路由插件 }, //和devDependencies(開發依賴庫):在安裝時使用--save-dev將寫入到devDependencies "devDependencies": { "autoprefixer": "^7.1.2",//autoprefixer作為postcss插件用來解析CSS補充前綴,例如 display: flex會補充為display:-webkit-box;display: -webkit-flex;display: -ms-flexbox;display: flex。 //babel:以下幾個babel開頭的都是針對es6解析的插件。用最新標準編寫的 JavaScript 代碼向下編譯成可以在今天隨處可用的版本 "babel-core": "^6.22.1",//babel的核心,把 js 代碼分析成 ast ,方便各個插件分析語法進行相應的處理。 "babel-helper-vue-jsx-merge-props": "^2.0.3",//預制babel-template函數,提供給vue,jsx等使用 "babel-loader": "^7.1.1",//使項目運行使用Babel和webpack來傳輸js文件,使用babel-core提供的api進行轉譯 "babel-plugin-syntax-jsx": "^6.18.0",//支持jsx "babel-plugin-transform-runtime": "^6.22.0",//避免編譯輸出中的重復,直接編譯到build環境中 "babel-plugin-transform-vue-jsx": "^3.5.0",//babel轉譯過程中使用到的插件,避免重復 "babel-preset-env": "^1.3.2",//轉為es5,transform階段使用到的插件之一 "babel-preset-stage-2": "^6.22.0",//ECMAScript第二階段的規范 "chalk": "^2.0.1",//用來在命令行輸出不同顏色文字 "copy-webpack-plugin": "^4.0.1",//拷貝資源和文件 "css-loader": "^0.28.0",//webpack先用css-loader加載器去解析后綴為css的文件,再使用style-loader生成一個內容為最終解析完的css代碼的style標簽,放到head標簽里 "extract-text-webpack-plugin": "^3.0.0",//將一個以上的包里面的文本提取到單獨文件中 "file-loader": "^1.1.4",//③打包壓縮文件,與url-loader用法類似 "friendly-errors-webpack-plugin": "^1.6.1",//識別某些類別的WebPACK錯誤和清理,聚合和優先排序,以提供更好的開發經驗 "html-webpack-plugin": "^2.30.1",//簡化了HTML文件的創建,引入了外部資源,創建html的入口文件,可通過此項進行多頁面的配置 "node-notifier": "^5.1.2",//支持使用node發送跨平臺的本地通知 "optimize-css-assets-webpack-plugin": "^3.2.0",//壓縮提取出的css,并解決ExtractTextPlugin分離出的js重復問題(多個文件引入同一css文件) "ora": "^1.2.0",//加載(loading)的插件 "portfinder": "^1.0.13",//查看進程端口 "postcss-import": "^11.0.0",//可以消耗本地文件、節點模塊或web_modules "postcss-loader": "^2.0.8",//用來兼容css的插件 "postcss-url": "^7.2.1",//URL上重新定位、內聯或復制 "rimraf": "^2.6.0",//節點的UNIX命令RM—RF,強制刪除文件或者目錄的命令 "semver": "^5.3.0",//用來對特定的版本號做判斷的 "shelljs": "^0.7.6",//使用它來消除shell腳本在UNIX上的依賴性,同時仍然保留其熟悉和強大的命令,即可執行Unix系統命令 "uglifyjs-webpack-plugin": "^1.1.1",//壓縮js文件 "url-loader": "^0.5.8",//壓縮文件,可將圖片轉化為base64 "vue-loader": "^13.3.0",//VUE單文件組件的WebPACK加載器 "vue-style-loader": "^3.0.1",//類似于樣式加載程序,您可以在CSS加載器之后將其鏈接,以將CSS動態地注入到文檔中作為樣式標簽 "vue-template-compiler": "^2.5.2",//這個包可以用來預編譯VUE模板到渲染函數,以避免運行時編譯開銷和CSP限制 "webpack": "^3.6.0",//打包工具 "webpack-bundle-analyzer": "^2.9.0",//可視化webpack輸出文件的大小 "webpack-dev-server": "^2.9.1",//提供一個提供實時重載的開發服務器 "webpack-merge": "^4.1.0"//它將數組和合并對象創建一個新對象。如果遇到函數,它將執行它們,通過算法運行結果,然后再次將返回的值封裝在函數中 }, //engines是引擎,指定node和npm版本 "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" }, //限制了瀏覽器或者客戶端需要什么版本才可運行 "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] }注釋:
①、點這里→webpack運行時的配置文檔傳送門
②、devDependencies和dependencies的區別: devDependencies里面的插件只用于開發環境,不用于生產環境,即輔助作用,打包的時候需要,打包完成就不需要了。而dependencies是需要發布到生產環境的,自始至終都在。比如wepack等只是在開發中使用的包就寫入到devDependencies,而像vue這種項目全程依賴的包要寫入到dependencies
點這里→更多安裝包文檔搜索頁傳送門
③、file-loader和url-loader的區別:以圖片為例,file-loader可對圖片進行壓縮,但是還是通過文件路徑進行引入,當http請求增多時會降低頁面性能,而url-loader通過設定limit參數,小于limit字節的圖片會被轉成base64的文件,大于limit字節的將進行圖片壓縮的操作。總而言之,url-loader是file-loader的上層封裝。
點這里→file-loader 和 url-loader詳解
點這里→file-loader文檔傳送門
點這里→url-loader文檔傳送門
2、.postcssrc.js
.postcssrc.js文件其實是postcss-loader包的一個配置,在webpack的舊版本可以直接在webpack.config.js中配置,現版本中postcss的文檔示例獨立出.postcssrc.js,里面寫進去需要使用到的插件
module.exports = {"plugins": {"postcss-import": {},//① "postcss-url": {},//② "autoprefixer": {}//③ } }注釋:
①、點這里→postcss-import文檔傳送門
②、點這里→postcss-url文檔傳送門
③、點這里→autoprefixer文檔傳送門
3、?.babelrc
該文件是es6解析的一個配置
{ //制定轉碼的規則"presets": [//env是使用babel-preset-env插件將js進行轉碼成es5,并且設置不轉碼的AMD,COMMONJS的模塊文件,制定瀏覽器的兼容["env", {"modules": false,"targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } }], "stage-2" ], "plugins": ["transform-vue-jsx", "transform-runtime"]//① }注釋:
①、點這里→transform-vue-jsx文檔傳送門
點這里→transform-runtime文檔傳送門
4、src內文件
我們開發的代碼都存放在src目錄下,根據需要我們通常會再建一些文件夾。比如pages的文件夾,用來存放頁面讓components文件夾專門做好組件的工作;api文件夾,來封裝請求的參數和方法;store文件夾,使用vuex來作為vue的狀態管理工具,我也常叫它作前端的數據庫等。
①、assets文件:腳手架自動會放入一個圖片在里面作為初始頁面的logo。平常我們使用的時候會在里面建立js,css,img,fonts等文件夾,作為靜態資源調用
②、components文件夾:用來存放組件,合理地使用組件可以高效地實現復用等功能,從而更好地開發項目。一般情況下比如創建頭部組件的時候,我們會新建一個header的文件夾,然后再新建一個header.vue的文件
③、router文件夾:該文件夾下有一個叫index.js文件,用于實現頁面的路由跳轉,具體使用請點擊→vue-router傳送門
④、App.vue:作為我們的主組件,可通過使用<router-view/>開放入口讓其他的頁面組件得以顯示。
⑤、main.js:作為我們的入口文件,主要作用是初始化vue實例并使用需要的插件,小型項目省略router時可放在該處
注釋:具體vue的用法可查看vue官方中文文檔傳送門
5、其他文件
①、.editorconfig:編輯器的配置文件
②、.gitignore:忽略git提交的一個文件,配置之后提交時將不會加載忽略的文件
③、index.html:頁面入口,經過編譯之后的代碼將插入到這來。
④、package.lock.json:鎖定安裝時的包的版本號,并且需要上傳到git,以保證其他人在npm install時大家的依賴能保證一致
⑤、README.md:可此填寫項目介紹
⑥、node_modules:根據package.json安裝時候生成的的依賴(安裝包)
三、config文件夾
├─config │ ├─dev.env.js │ ├─index.js │ ├─prod.env.js1、config/dev.env.js
config內的文件其實是服務于build的,大部分是定義一個變量export出去。
注釋:①、點這里→webpack-merge文檔傳送門
2、config/prod.env.js
當開發是調取dev.env.js的開發環境配置,發布時調用prod.env.js的生產環境配置
3、config/index.js
注釋:①點擊→devtool文檔傳送門
四、build文件夾
├─build │ ├─build.js │ ├─check-versions.js │ ├─utils.js │ ├─vue-loader.conf.js │ ├─webpack.base.conf.js │ ├─webpack.dev.conf.js │ ├─webpack.prod.conf.js1、build/build.js
該文件作用,即構建生產版本。package.json中的scripts的build就是node build/build.js,輸入命令行npm run build對該文件進行編譯生成生產環境的代碼。
注釋:
①、點這里→ora文檔傳送門
②、點這里→chalk文檔傳送門
③、點這里→rimraf文檔傳送門
2、build/check-version.js
該文件用于檢測node和npm的版本,實現版本依賴
注釋:
①、點這里→chalk文檔傳送門
點這里→semver文檔傳送門
3、build/utils.js
utils是工具的意思,是一個用來處理css的文件。
注釋:
①、path.posix:提供對路徑方法的POSIX(可移植性操作系統接口)特定實現的訪問,即可跨平臺,區別于win32。
path.join:用于連接路徑,會正確使用當前系統的路徑分隔符,Unix系統是"/",Windows系統是""
點擊→path用法傳送門
4、vue-loader.conf.js
該文件的主要作用就是處理.vue文件,解析這個文件中的每個語言塊(template、script、style),轉換成js可用的js模塊。
5、webpack.base.conf.js
webpack.base.conf.js是開發和生產共同使用提出來的基礎配置文件,主要實現配制入口,配置輸出環境,配置模塊resolve和插件等
注釋:
①、點擊→vue-loader文檔傳送門
②、點擊→babel-loader文檔傳送門
6、webpack.dev.conf.js
注釋:
①、點擊→friendly-errors-webpack-plugin文檔傳送門
②、點擊→process文檔傳送門
③、點擊→babel-loader文檔傳送門
④、點擊→devtool文檔傳送門
⑤、點擊→webpack的HotModuleReplacementPlugin文檔傳送門
⑥、點擊→html-webpack-plugin文檔傳送門
7、webpack.prod.conf.js
注釋:webpack.prod.conf.js詳細內容
五、結語
第一篇博文總在想要寫點什么,就根據自己的經驗加查了下文檔寫了這么一篇工具類的文章,由于有些插件有些用法會重復,所以按照文章先后,寫過用法或者給過鏈接的插件,在后面的文章就省略了,有時間的建議從頭開始,如果單獨看某章節的話遇到不懂的語法或插件可全文查找,也可以點擊更多安裝包傳送門進行查找閱讀。本文將vue本身自帶的英文注釋刪除了,但英文注釋非常有用可以仔細閱讀,希望對大家學習vue和webpack都有所幫助。
轉自:https://segmentfault.com/a/1190000014804826
轉載于:https://www.cnblogs.com/sichaoyun/p/9241829.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的vue-cli脚手架中webpack配置基础文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上下文信息 RpcContext
- 下一篇: 第十周补做作业