建立webpackTest文件夾css
建立package.json文件html
npm init
webpackTest/app ├── css/ │ ├── reset.scss ├── js/ │ ├── home/ │ │ ├── index.vue │ ├── router/ │ │ ├── index.js │ ├── App.vue │ ├── main.js │ ├── test.vue └── views/ └── index.html
基礎配置:
entry(入口,webpack要構建的文件)
module(配置各類loader)
plugins(插件)
output(輸出)進階配置:
resolve(webpack怎麼查詢文件)
devtool(eg:sourceMap如何用)
devServer(開啓服務)vue
//基礎配置webpack.config.js const path = require('path'); module.exports = { entry:{ app:'./app/js/main.js' }, module:{ loaders:[{ test: /\.html$/, loader: 'html-loader' },{ test:/\.vue$/, loader:'vue-loader' },{ test:/\.scss$/, loader:'style-loader!css-loader!sass-loader'//webpack支持對一個文件多個loader的串行解析,解析順序爲從右到左 }] }, plugins:[], output:{ filename:'[name].min.js', path:path.resolve(__dirname,'dist')//node提供的path對象,resolve表示相對路徑,__dirname表示當前路徑 } }
npm install webpack -D
webpack-dev-server
提供了一個簡單的 web 服務器,而且可以實時從新加載(live reloading)。html-webpack-plugin
該插件將爲你生成一個HTML5文件。clean-webpack-plugin
該插件自動清除 dev-server 生成的文件,防止開發過程當中的緩存。
參考資料:webpack中文文檔node
//安裝webpack-dev-server npm install --save-dev webpack-dev-server npm install html-webpack-plugin -D npm install clean-webpack-plugin -D
//開啓http服務,webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = { devServer: { contentBase: path.join(__dirname, "dist"),//靜態文件的輸出路徑 compress: true,//整個服務開啓gzip壓縮 port: 9000//端口號 }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ template:'./app/views/index.html' }) ] };
npm install html-loader -D//-D表示開發依賴 npm install node-sass -D//sass-loader的依賴 npm install style-loader css-loader sass-loader -D npm install vue-loader -D
//模擬一個reset文件 h1{ color: #f00; .title{ color: yellow; } }
<template lang="html"> <div class="home"> <h1>home</h1> </div> </template> <script> export default { } </script> <style lang="css"> .home{ color: red; font-size: 80px; } </style>
須要引用vue官方routerwebpack
//1.引入vue,vue-router import Vue from 'vue'; import Router from 'vue-router'; import Home from '../home/index.vue'; //2.經過 Vue.use() 明確地安裝路由功能 Vue.use(Router); //3. export default new Router({ routes:[{ path:'/', name:'home', component:Home }] })
npm install vue npm install vue-router
<template lang="html"> <div id="app"> <router-view></router-view> </div> </template> <script> export default { name:'app' } </script> <style lang="css"> </style>
import Vue from 'vue'; import App from './App.vue' import router from './router/index.js' //聲明當前不是生產環境 Vue.config.productionTip = false; //實例化vue new Vue({ el:"#app", router, components:{ App }, template:"<App></App>" })
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>自定義</title> </head> <body> <div id="app"></div> </body> </html>
在 NPM 包的 dist/ 目錄你將會找到不少不一樣的 Vue.js 構建版本。這裏列出了它們之間的差異:web
完整版:同時包含編譯器和運行時的版本。vue-router
編譯器:用來將模板字符串編譯成爲 JavaScript 渲染函數的代碼。npm
運行時:用來建立 Vue 實例、渲染並處理虛擬 DOM 等的代碼。基本上就是除去編譯器的其它一切。json
//配置完整版vue.js module.exports = { // ... resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 時需用 'vue/dist/vue.common.js' } } }
利用px2rem-loader
將css、scss文件中的px轉爲rem,從而實現自適應。緩存
npm install px2rem-loader //依賴 npm install vue-style-loader
//webpack.config.js module.exports = { //... module:{ loaders:[{ test:/\.vue$/, loader:'vue-loader', options: { loaders: { css: 'vue-style-loader!css-loader!px2rem-loader?remUnit=75&remPrecision=8', scss: 'vue-style-loader!css-loader!px2rem-loader?remUnit=75&remPrecision=8!sass-loader' // <style lang="scss"> } } } } }
參考資料:px2rem-loader、vue-loader預處理器
CSS Modules是一個用於模塊化和組合 CSS 的流行系統。
//webpack.config.js module.exports = { //... module:{ loaders:[{ test:/\.vue$/, loader:'vue-loader', options: { cssModules: { localIdentName: '[path][name]---[local]---[hash:base64:5]', camelCase: true } } } } }
在你的 <style> 上添加 module 屬性:<style module>...</style>
,這將爲 css-loader 打開 CSS Modules 模式,生成的 CSS 對象將爲組件注入一個名叫 $style 的計算屬性,你能夠在你的模塊中使用動態 class 綁定:
<template> <p :class="$style.red"> This should be red </p> </template>
參考資料:CSS Modules
將自動提取 *.vue 文件內的 <style> 到單個文件;提取出來的文件在<head>中使用<link>
方式引入。
npm install extract-text-webpack-plugin --save-dev
// webpack.config.js const ExtractTextPlugin = require("extract-text-webpack-plugin") module.exports = { //... module:{ loaders:[{ test:/\.vue$/, loader:'vue-loader', options: { loaders: { css: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=75&remPrecision=8', fallback: 'vue-style-loader' }), scss: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=75&remPrecision=8!sass-loader', fallback: 'vue-style-loader' // <- 這是vue-loader的依賴,因此若是使用npm3,則不須要顯式安裝 }) } } } }, plugins: [ new ExtractTextPlugin("style.css") ] }
參考資料:提取css文件
若是以爲內容對您有幫助,請點點贊哦~~~一塊兒學習,一塊兒成長(#^.^#)
經過webpack的DefinePlugin
傳遞參數的不一樣,來區別配置開發環境和生產環境。
//webpack.config.js const webpack = require('webpack'); module.exports = env =>{ if(!env){ env = {}//沒參數時,賦值,避免undefined. } let plugins = [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ template:'./app/views/index.html' }), ]; if(env.production){ plugins.push( //給webpack修改node的全局變量 new webpack.DefinePlugin({ 'process.env':{ NODE_ENV:'production' } }), new ExtractTextPlugin("style.css"), ); } return { //... module:{ loaders:[{ test:/\.vue$/, loader:'vue-loader', options: { loaders: env.production?{ css: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=75&remPrecision=8', fallback: 'vue-style-loader' }), scss: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=75&remPrecision=8!sass-loader', fallback: 'vue-style-loader' // <- 這是vue-loader的依賴,因此若是使用npm3,則不須要顯式安裝 }) }:{ css:'vue-style-loader!css-loader!px2rem-loader?remUnit=75&remPrecision=8', scss:'vue-style-loader!css-loader!px2rem-loader?remUnit=75&remPrecision=8!sass-loader' } } } }, plugins, } }
//package.json "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "watch": "webpack --watch", "start": "webpack-dev-server --open", "build": "webpack --env.production" },