webpack 是前端的一個項目構建工具,它是基於 Node.js 開發出來的一個前端工具;css
npm i webpack -g
全局安裝webpack,這樣就能在全局使用webpack的命令npm i webpack --save-dev
安裝到項目依賴中npm init
初始化項目,使用npm管理項目中的依賴包cnpm i jquery --save
安裝jquery類庫main.js
並書寫各行變色的代碼邏輯:// 導入jquery類庫 import $ from 'jquery' // 設置偶數行背景色,索引從0開始,0是偶數 $('#list li:even').css('backgroundColor','lightblue'); // 設置奇數行背景色 $('#list li:odd').css('backgroundColor','pink');
main.js
會報錯,由於瀏覽器不認識import
這種高級的JS語法,須要使用webpack進行處理,webpack默認會把這種高級的語法轉換爲低級的瀏覽器能識別的語法;webpack 入口文件路徑 輸出文件路徑
對main.js
進行處理:webpack src/js/main.js dist/bundle.js
webpack.config.js
webpack.config.js
中配置這兩個路徑:// 導入處理路徑的模塊 var path = require('path'); // 導出一個配置對象,未來webpack在啓動的時候,會默認來查找webpack.config.js,並讀取這個文件中導出的配置對象,來進行打包處理 module.exports = { entry: path.resolve(__dirname, 'src/js/main.js'), // 項目入口文件 output: { // 配置輸出選項 path: path.resolve(__dirname, 'dist'), // 配置輸出的路徑 filename: 'bundle.js' // 配置輸出的文件名 } }
webpack-dev-server
來實現代碼實時打包編譯,當修改代碼以後,會自動進行打包構建。cnpm i webpack-dev-server --save-dev
安裝到開發依賴webpack-dev-server
來進行打包,發現報錯,此時須要藉助於package.json
文件中的指令,來進行運行webpack-dev-server
命令,在scripts
節點下新增"dev": "webpack-dev-server"
指令,發現能夠進行實時打包,可是dist目錄下並無生成bundle.js
文件,這是由於webpack-dev-server
將打包好的文件放在了內存中bundle.js
放在內存中的好處是:因爲須要實時打包編譯,因此放在內存中速度會很是快http://localhost:8080/
網站,發現是一個文件夾的面板,須要點擊到src目錄下,才能打開咱們的index首頁,此時引用不到bundle.js文件,須要修改index.html中script的src屬性爲:<script src="../bundle.js"></script>
http://localhost:8080/
的時候直接訪問到index首頁,能夠使用--contentBase src
指令來修改dev指令,指定啓動的根目錄:"dev": "webpack-dev-server --contentBase src"
同時修改index頁面中script的src屬性爲<script src="bundle.js"></script>
html
html-webpack-plugin
插件配置啓動頁面因爲使用--contentBase
指令的過程比較繁瑣,須要指定啓動的目錄,同時還須要修改index.html中script標籤的src屬性,因此推薦你們使用html-webpack-plugin
插件配置啓動頁面.前端
cnpm i html-webpack-plugin --save-dev
安裝到開發依賴webpack.config.js
配置文件以下:// 導入處理路徑的模塊 var path = require('path'); // 導入自動生成HTMl文件的插件 var htmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: path.resolve(__dirname, 'src/js/main.js'), // 項目入口文件 output: { // 配置輸出選項 path: path.resolve(__dirname, 'dist'), // 配置輸出的路徑 filename: 'bundle.js' // 配置輸出的文件名 }, plugins:[ // 添加plugins節點配置插件 new htmlWebpackPlugin({ template:path.resolve(__dirname, 'src/index.html'),//模板路徑 filename:'index.html'//自動生成的HTML文件的名稱 }) ] }
package.json
中script
節點中的dev指令以下:"dev": "webpack-dev-server"
html-webpack-plugin
插件會自動把bundle.js注入到index.html頁面中!注意:熱更新在JS中表現的不明顯,能夠從一下子要講到的CSS身上進行介紹說明!vue
package.json
的script節點以下,其中--open
表示自動打開瀏覽器,--port 4321
表示打開的端口號爲4321,--hot
表示啓用瀏覽器熱更新:"dev": "webpack-dev-server --hot --port 4321 --open"
webpack.config.js
文件,新增devServer
節點以下:devServer:{ hot:true, open:true, port:4321 }
webpack
模塊:var webpack = require('webpack');
plugins
節點下新增:new webpack.HotModuleReplacementPlugin()
cnpm i style-loader css-loader --save-dev
webpack.config.js
這個配置文件:module: { // 用來配置第三方loader模塊的 rules: [ // 文件的匹配規則 { test: /\.css$/, use: ['style-loader', 'css-loader'] }//處理css文件的規則 ] }
use
表示使用哪些模塊來處理test
所匹配到的文件;use
中相關loader模塊的調用順序是從後向前調用的;cnpm i less-loader less -D
webpack.config.js
這個配置文件:{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
cnpm i sass-loader node-sass --save-dev
webpack.config.js
中添加處理sass文件的loader模塊:{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
cnpm i url-loader file-loader --save-dev
webpack.config.js
中添加處理url路徑的loader模塊:{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
limit
指定進行base64編碼的圖片大小;只有小於指定字節(byte)的圖片纔會進行base64編碼:{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },
cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev
安裝babel的相關loader包cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev
安裝babel轉換的語法webpack.config.js
中添加相關loader模塊,其中須要注意的是,必定要把node_modules
文件夾添加到排除項:{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
.babelrc
文件,並修改這個配置文件以下:{ "presets":["es2015", "stage-0"], "plugins":["transform-runtime"] }
babel-preset-es2015
能夠更新爲babel-preset-env
,它包含了全部的ES相關的語法;有時候使用npm i node-sass -D
裝不上,這時候,就必須使用 cnpm i node-sass -D
node
運行cnpm i vue -S
將vue安裝爲運行依賴;jquery
運行cnpm i vue-loader vue-template-compiler -D
將解析轉換vue的包安裝爲開發依賴;webpack
運行cnpm i style-loader css-loader -D
將解析轉換CSS的包安裝爲開發依賴,由於.vue文件中會寫CSS樣式;git
在webpack.config.js
中,添加以下module
規則:es6
module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.vue$/, use: 'vue-loader' } ] }
App.js
組件頁面:<template> <!-- 注意:在 .vue 的組件中,template 中必須有且只有惟一的根元素進行包裹,通常都用 div 看成惟一的根元素 --> <div> <h1>這是APP組件 - {{msg}}</h1> <h3>我是h3</h3> </div> </template> <script> // 注意:在 .vue 的組件中,經過 script 標籤來定義組件的行爲,須要使用 ES6 中提供的 export default 方式,導出一個vue實例對象 export default { data() { return { msg: 'OK' } } } </script> <style scoped> h1 { color: red; } </style>
main.js
入口文件:// 導入 Vue 組件 import Vue from 'vue' // 導入 App組件 import App from './components/App.vue' // 建立一個 Vue 實例,使用 render 函數,渲染指定的組件 var vm = new Vue({ el: '#app', render: c => c(App) });
webpack.config.js
中添加resolve
屬性:resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' } }
使用 export default
和 export
導出模塊中的成員; 對應ES5中的 module.exports
和 export
github
使用 import ** from **
和 import '路徑'
還有 import {a, b} from '模塊標識'
導入其餘模塊
使用箭頭函數:(a, b)=> { return a-b; }
import VueRouter from 'vue-router'
Vue.use(VueRouter);
import login from './components/account/login.vue' import register from './components/account/register.vue'
var router = new VueRouter({ routes: [ { path: '/', redirect: '/login' }, { path: '/login', component: login }, { path: '/register', component: register } ] });
var vm = new Vue({ el: '#app', // render: c => { return c(App) } render(c) { return c(App); }, router // 將路由對象,掛載到 Vue 實例上 });
router-link
和router-view
:<router-link to="/login">登陸</router-link> <router-link to="/register">註冊</router-link> <router-view></router-view>