參考連接php
沒有安裝記得先安裝webpack npm install webpack webpack-cli -D
css
npm init -y
來生成配置是文件 package.json
npx webpack ./src/main.js --output-filename bundle.js --output-path ./dist/ --mode development
webpack .\src\main.js .\dist\bundle.js
npx webpack a.js --output-filename b.js --output-path . --mode development
mode 表示生產仍是開發模式html
添加 mode: 'production' 在webpack.config.js 中(若是沒有這個文件就本身建立一下了)vue
在根目錄下新建文件 webpack.config.js
node
webpack.config.js
文件中新建配置項module.exports = { // 打包文件入口 entry // 1. 單一條目語法能夠簡寫 // 2. 傳遞數組(將多個依賴文件一塊兒注入並將其依賴關係映射到一個「塊」) // 3. 對象(「可擴展的webpack配置」是能夠重用並與其餘部分配置組合的配置) entry: path.join(__dirname,'./src/main.js'), output:{// 輸出文件相關配置 path: path.join(__dirname,'./dist'), filename:'bundle.js' }, mode: 'production' // 環境 }
根據入口文件,生成多個js文件
下面實例 能夠生成 app.bundle.js 和 print.bundle.js 文件webpack
entry: { app: './src/index.js', print: './src/print.js' }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }
當咱們在控制檯運行 webpack
命令執行時, webpack 作了下面過程ios
webpack.config.js
配置文件HtmlWebpackPlugin
生成首頁若是咱們更改了其中一個入口點的名稱,或者甚至添加了新入口點,生成的包將在構建時重命名,但咱們的index.html文件仍將引用舊名稱。因此能夠利用工具生成一個頁面來引入這些文件git
npm install --save-dev html-webpack-plugin
webpack.config.js
文件中添加配置項先導入插件 const HtmlWebpackPlugin = require('html-webpack-plugin');
github
plugins: [ new HtmlWebpackPlugin({ template:"./src/index.html", // 根據 目標文件生成 html title: 'Output Management' }) ]
Webpack將生成文件並將它們放在/dist文件夾中,但它不會跟蹤項目實際使用的文件。
一般,最好/dist在每次構建以前清理文件夾,以便僅生成使用過的文件。web
clean-webpack-plugin
npm install --save-dev clean-webpack-plugin
webpack.config.js
文件const CleanWebpackPlugin = require('clean-webpack-plugin'); plugins: [ new CleanWebpackPlugin(['dist']), ],
當使用 webpack 打包源碼時,很難跟蹤錯誤和警告到其原始位置。例如:
將三個源文件(a.js,b.js和c.js)捆綁到一個bundle(bundle.js)中,
若是其中一個源文件出現錯誤,則堆棧跟蹤將簡單地指向bundle.js。
inline-source-map
來追蹤源錯誤給 webpack.config.js 配置文件 新增
devtool: 'inline-source-map'
在上面,咱們已經習慣了
webpack
命令 打包"scripts": { "start": "webpack" }
使用 npm run start
來進行打包
但每次都要打包顯得有麻煩,咱們能夠自動編譯代碼
讓咱們添加一個npm腳本,它將啓動webpack的Watch Mode:
在 package.json
配置文件中新增
"scripts": { "watch": "webpack --watch", }
以後執行 npm run watch
它不會退出命令行, 當你從新編譯文件後,他就會自動打包了
webpack-dev-server
以前確保安裝 webpack 和 webpack-cli (全局安裝不行)npm install webpack webpack-cli -D
webpack-dev-server
提供了一個簡單的Web服務器和使用實時從新加載的能力
使用命令 npm install webpack-dev-server
來進行安裝webpack-dev-server
webpack.config.js
devServer: { // 配置 服務器 信息 contentBase: './dist', // 託管的目錄 port: 3000, // 指定端口號 open: true, // 自動打開瀏覽器 },
"start": "webpack-dev-server --open --contentBase dist --port 3000"
package.json
添加腳原本運行服務器"scripts": { "start": "webpack-dev-server --open", },
npm start
命令來運行。此時瀏覽器自動加載頁面。若是更改任何源文件並保存它們,則在編譯代碼後,Web服務器將自動從新加載
它容許在運行時更新全部類型的模塊,而無需徹底刷新。(相似於tomcat服務器的debug模式)
const webpack = require('webpack');
devServer: { contentBase: './dist', hot: true },
plugins: [ new webpack.HotModuleReplacementPlugin() s]
"start": "webpack-dev-server --hot"
webpack-dev-middleware
他就是啓動了一個服務器,將結果放到服務器上去
webpack-dev-middleware
是一個包裝器,它將webpack處理的文件發送到服務器
由於 webpack-dev-middleware
依賴於 express
框架
使用 npm install --save-dev express webpack-dev-middleware
命令
output: { publicPath: '/' }
publicPath運行在服務器中 提供文件http://localhost:3000
const express = require('express'); const webpack = require('webpack'); const webpackDevMiddleware = require('webpack-dev-middleware'); const app = express(); const config = require('./webpack.config.js'); const compiler = webpack(config); // 告訴 express 使用 webpack-dev-middleware 和 webpack.config.js app.use(webpackDevMiddleware(compiler, { publicPath: config.output.publicPath })); // 服務器啓動端口 app.listen(3000, function () { console.log('請訪問: http://127.0.0.1:3000\n'); });
在package.json
文件中新增:
"scripts": { "server": "node server.js", }
npm run server
就能夠了npm install --save-dev style-loader css-loader
webpack.config.js
文件中添加module: { rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader'] }] },
less-loader
不過 less-loader 依賴 less
因此安裝兩個包配置文件:
rules: [{ test: /\.less$/, use: ['style-loader', 'css-loader','less-loader'] }]
sass-loader
就能夠了。node-sass配置文件:
rules: [{ test: /\.scss$/, use: ['style-loader', 'css-loader','sass-loader'] }]
webpack使用正則表達式來肯定它應該查找哪些文件並將其提供給特定的加載器。在這種狀況下,任何以...結尾的文件.css都將被提供給style-loader和css-loader。
使用 url加載器 或 文件加載器
file-loader 和 url-loader 的關係:
簡單說url-loader封裝了file-loader,但url-loader不依賴於file-loader。
url的工做狀況分兩種狀況:
1.文件大小小於limit參數,url-loader將會把文件轉爲DataURL(base64碼)
2.文件大小大於limit,url-loader會調用file-loader進行處理,參數也會直接傳給>file-loader。所以咱們只須要安裝url-loader便可
npm install --save-dev url-loader
webpack.config.js
配置文件新增圖片匹配規則module: { rules: [ { test: /\.(png|svg|jpg|gif)$/, use: ['url-loader'] } ] },
文件和URL加載器將獲取你經過它們加載的任何文件,並將其輸出到構建目錄。這意味着咱們能夠將它們用於任何類型的文件,包括字體
npm install --save-dev file-loader
webpack.config.js
配置文件新增字體匹配規則module: { rules: [ { test: /\.(woff|woff2|eot|ttf|otf)$/, use: ['url-loader'] } ] },
npm install --save-dev csv-loader xml-loader
webpack.config.js
配置文件新增數據類型文件匹配規則{ test: /\.(csv|tsv)$/, use: [ 'csv-loader' ] }, { test: /\.xml$/, use: [ 'xml-loader' ] }
這樣就能夠import將這四種類型的數據中的任何一種(JSON,CSV,TSV,XML)導入使用了
加載 Babel 包,用來將 webpack 處理不的 ES6或ES7 語法 轉換爲 低級語法
npm install babel-core babel-loader babel-preset-env -D
webpack.config.js
添加處理規則// 使用babel-loader在webpack打包時處理js文件 { test: /\.js$/, loader: 'babel-loader', include: [path.resolve(__dirname, 'src')] // src目錄下的js文件 }
在項目根目錄下新建 .babelrc
文件
{ "presets": ["env"] }
若是想要使用 草案階段ES 的語法規則 記得就是用下面的轉換規則和配置了
npm i babel-preset-stage-2 -D
.babelrc
配置文件{ "presets": [ ["env", { "targets": { "browsers": ["> 1%", "last 2versions", "not ie <= 8"] } }], "stage-2" ] }
以上配置表示使用babel-preset-env編譯js,且瀏覽器環境爲: 一、全球市場份額大於1%的瀏覽器 二、最後2個版本的瀏覽器 三、大於IE8版本的IE瀏覽器 而後再使用babel-preset-stage-2插件編譯尚處在草案階段的語法
babel-preset-loader、babel-preset-env、babel-preset-core這3個插件就能知足使用webpack打包js文件時先經過babel編譯js爲es5的代碼
babel-preset-stage-2插件能夠處理草案階段的ECMASCRIPT語法
- - - - - - -
npm install --save-dev babel-core babel-loader babel-plugin-transform-runtime
npm install --save-dev babel-preset-env babel-preset-stage-0
webpack.config.js
添加處理規則、{ test: /\.js$/, use: [ 'babel-loader' ], exclude:/node_modules/ // 不處理這個包下的文件 }
.babelrc
,存放在項目的根目錄下.{ "presets": [], "plugins": [] }
package.json
使用"babel":{ "presets": [], // 配置語法規則 "plugins": [] // 配置插件 }
此時你應該明白他們之間的關係了。 因此 .babelrc
是遵循json語法格式的
presets: 表示轉碼規則
建議安裝 npm install babel-presets-env -D
注意:在使用ES7語法規則時候就要添加
babel-preset-stage-0
babel-preset-stage-1
babel-preset-stage-2
babel-preset-stage-3
babel-preset-stage-4
中的一個就能夠了。 使用方法見上面
plugins:轉碼插件
npm 安裝時,可能會有一個 baabel-core 和 babel-loader 不匹配的現象。
此時,根據提示 更換 baabel-core 或者 babel-loader 版本便可了。
npm install vue -S
npm install vue-loader vue-template-compiler -D
webpack.config.js
文件 新增const VueLoaderPlugin = require('vue-loader/lib/plugin'); plugins: [ // 配置插件的節點 new VueLoaderPlugin(), ], { test:/\.vue$/, use:['vue-loader'] }
render:c=>c(組件名稱)
import Vue from 'vue'
導入的和script 引入的並不同。其實這個並不經常使用。。也不須要配置
- 在
webpack.config.js
文件中配置resolve:{ alias:{ "vue$": "vue/dist/vue.js" } }
- 使用 import Vue from '../node_modules/vue/dist/vue.js'
npm install mint-ui -D
import Mint from 'mint-ui'; Vue.use(Mint); import 'mint-ui/lib/style.css';
import { Header } from 'mint-ui'; import 'mint-ui/lib/header/style.css'; Vue.component(Header.name, Header);
這時候就會發現須要單獨導入css文件,有些繁瑣
npm install babel-plugin-component -D
.babelrc
配置"plugins": [["component", [ { "libraryName": "mint-ui", "style": true } ]]]
可能編譯器會有一些提示。不要在乎就行了
npm install vue-router -D
下載路由import VueRouter from 'vue-router' Vue.use(VueRouter);
var router = new VueRouter({ routes:[ // 路由匹配規則 { path:'/home', component: HomeContainer}, ] })
var vm = new Vue({ el:"#app", router, // 掛載 路由 });
固然能夠把路由模塊抽離出去,封裝起來 (建議這樣作)
vue-resource
npm i vue-resourse -D
import VueResourse from 'vue-resourse' Vue.use(VueResourse);
this.$http.get("url").then(function(result){ // auto });
post:
Axios 是一個基於 promise 的 HTTP 庫
npm install axios vue-axios -D
import Axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios,Axios)
axios.get('url').then(function(response){}) axios.get('url',{ params:{ id:12345, name:'ay' } }).then((response)=>{ console.log(response) }) axios.get('url?id=12345&name=ay').then(function(response){})
axios.post('index.php',{ id:12345, name:'ay' }).then((response)=>{ console.log(response) })
function getUrl1() { return axios.get('url1'); } function getUrl2() { return axios.get('url2'); } axios.all([getUrl1(), getUrl2()]) .then(axios.spread(function (acct, perms) { // acct爲第一個請求的結果,perms爲第二個請求的結果 }));
能夠從瀏覽器中建立XHR對象
(異步)
能夠從nodeJS中建立HTTP請求
支持Promise API
(異步,鏈式編程)
能夠攔截請求和響應 (關鍵點, 能夠作切面編程)
能夠轉換請求數
能夠取消請求
能夠自動轉換JSON數據
(移動端)
客戶端支持防護XSRF
ui
npm install mockjs