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.jsjavascript
├─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.md
項目做爲一個你們庭,每一個文件都各司其職。package.json來制定名單,須要哪些npm包來參與到項目中來,npm install命令根據這個配置文件增減來管理本地的安裝包。php
{
//從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