一步步構造自己的vue2.0+webpack環境
前面vue2.0和webpack都已經有接觸了些(vue.js入門, webpack入門之簡單例子跑起來 ),現在開始學習如何構造自己的vue2.0+webpack環境。
1.首先新建一個目錄vue-wkdemo,這是我們的專案目錄。執行 npm init 命令生成package.json檔案。執行npm init之後,會提示你填寫一些專案的資訊,一直回車預設就好了,或者直接執行 npm init -y 直接跳過詢問步驟。
2.安裝專案依賴項
npm install webpack webpack-dev-server vue-loader vue-html-loader css-loader vue-style-loader
vue-hot-reload-api babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015 [email protected]5 --save-dev
npm install html-webpack-plugin --save-dev
npm install vue --save
3.新建入口檔案index.js,檔案位置放置為:vue-wkdemo->app->index->index.js
import Vue from 'Vue'
import Favlist from './components/Favlist.vue'
Vue.config.debug = true;//開啟錯誤提示
window.onload = function () {
new Vue({
el: '#app',
components: {
'my-component': Favlist
}
});
}
4.構建index.html模版,檔案位置放置為:vue-wkdemo->app->index->index.html
<!DOCTYPE html> <html lang="zh"> <head> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>首頁</title> </head> <body> <div id="app"> <my-component></my-component> </div> </body> </html>
5.構建vue元件Favlist.vue ,檔案放置為:vue-wkdemo->app->components->Favlist.vue
<template id="template-home">
<div>
<div v-for="n in 10">div</div>
</div>
</template>
<style>
body {
color: red;
}
</style>
6.構建 webpack.config.js ,檔案放置為:vue-wkdemo->build->webpack.config.js
// nodejs 中的path模組
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// 入口檔案,path.resolve()方法,可以結合我們給定的兩個引數最後生成絕對路徑,最終指向的就是我們的index.js檔案
entry: path.resolve(__dirname, '../app/index/index.js'),
// 輸出配置
output: {
// 輸出路徑是 myProject/output/static
path: path.resolve(__dirname, '../output/static'),
publicPath: 'static/',
filename: '[name].[hash].js',
chunkFilename: '[id].[chunkhash].js'
},
resolve: {
extensions: ['', '.js', '.vue'],
alias: {
'Vue': 'vue/dist/vue.js'
}
},
module: {
loaders: [
// 使用vue-loader 載入 .vue 結尾的檔案
{
test: /\.vue$/,
loader: 'vue'
},
{
test: /\.js$/,
loader: 'babel?presets=es2015',
exclude: /node_modules/
}
]
},
Favlist: {
loaders: {
js: 'babel'
}
},
plugins: [
new HtmlWebpackPlugin({
filename: '../index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
]
}
View Code
7.執行構建命令 : ‘webpack –display-modules –display-chunks –config build/webpack.config.js’
可以看到輸出檔案:
8.到這裡,我們的目錄結構為:
執行output->static->index.html這個檔案,過程中遇到各種各樣的坑 (省略幾百字。。。)
最後終於看到結果了!!!
9.問題來了,每次都需要執行構建命令才能檢視改變後的程式碼效果,這是很沒有效率 ,於是還需要安裝 webpack-dev-middleware 中介軟體和 webpack-hot-middleware 中介軟體
npm install webpack-dev-middleware webpack-hot-middleware --save-dev
另外還需要安裝express
npm install express --save-dev
介紹下 webpack-dev-middleware 中介軟體,它是對webpack一個簡單的包裝,它可以通過連線伺服器服務那些從webpack發射出來的檔案,它有一下幾點好處:
1、不會向硬碟寫檔案,而是在記憶體中,注意我們構建專案實際就是向硬碟寫檔案。
2、當檔案改變的時候,這個中介軟體不會再服務舊的包,你可以直接重新整理瀏覽器就能看到最新的效果,這樣你就不必等待構建的時間,所見即所得。
在build目錄中建立一個dev-server.js檔案,並寫入內容:
// 引入必要的模組
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.config')
// 建立一個express例項
var app = express()
// 呼叫webpack並把配置傳遞過去
var compiler = webpack(config)
// 使用 webpack-dev-middleware 中介軟體
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: config.output.publicPath,
stats: {
colors: true,
chunks: false
}
})
// 註冊中介軟體
app.use(devMiddleware)
// 監聽 8888埠,開啟伺服器
app.listen(8888, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:8888')
})
View Code
然後我們修改 webpack.config.js 配置檔案
① 將 config.output.publicPath 修改為 ‘/‘:
// 輸出配置
output: {
// 輸出路徑是 myProject/output/static
path: path.resolve(__dirname, '../output/static'),
publicPath: '/',
filename: '[name].[hash].js',
chunkFilename: '[id].[chunkhash].js'
},
② 將 plugins 中 HtmlWebpackPlugin 中的 filename 修改為 ‘app/index/index.html’
plugins: [
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
]
此時,我們在專案根目錄執行下面的命令,開啟服務:
node build/dev-server.js
在瀏覽器中輸入 http://localhost:8888/app/index/index.html,如果成功了將和前面本地執行output->static->index.html這個檔案的結果是一樣一樣的
不信?
為了不去修改webpack.config.js,在build目錄下新建一個webpack.dev.conf.js檔案,意思是開發模式下要讀取的配置檔案,並寫入一下內容:
var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path');
// 引入基本配置
var config = require('./webpack.config');
config.output.publicPath = '/';
config.plugins = [
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
];
module.exports = config;
View Code
這樣在dev環境下的配置檔案覆蓋了基本配置檔案,只需要在dev-server.js中將
var config = require('./webpack.config')
改為:
var config = require('./webpack.dev.conf')
到這裡,我們已經使用webpack-dev-middleware 搭建基本的開發環境了,但是每次修改程式碼後,還是需要我們手動重新整理瀏覽器,接下來介紹熱載入(所謂的熱載入,意思就是說能夠追蹤我們程式碼的變化,並自動更新介面,甚至還能保留程式狀態。),我們需要 webpack-hot-middleware 中介軟體來完成熱載入。
配合 webpack-dev-middleware 使用,我們還需要做的是:
第一步:安裝(上面我們已經安裝過)
npm install webpack-dev-middleware --save-dev
第二步:在 webpack.dev.conf.js 配置檔案中新增三個外掛,如下:
var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path');
var webpack = require('webpack');
// 引入基本配置
var config = require('./webpack.config');
config.output.publicPath = '/';
config.plugins = [
// 新增三個外掛
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
];
module.exports = config;
第三步:在 webpack.config.js 檔案中入口配置中新增 ‘webpack-hot-middleware/client’,如下:
entry: ['webpack-hot-middleware/client', path.resolve(__dirname, '../app/index/index.js')],
第四步:在 dev-server.js 檔案中使用外掛
// 引入必要的模組
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.dev.conf')
// 建立一個express例項
var app = express()
// 呼叫webpack並把配置傳遞過去
var compiler = webpack(config)
// 使用 webpack-dev-middleware 中介軟體
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: config.output.publicPath,
stats: {
colors: true,
chunks: false
}
})
// 使用 webpack-hot-middleware 中介軟體
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// 註冊中介軟體
app.use(devMiddleware)
// 註冊中介軟體
app.use(hotMiddleware)
// 監聽 8888埠,開啟伺服器
app.listen(8888, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:8888')
})
現在重啟的服務,然後修改 Favlist.vue 中的頁面顏色為 ‘black’:
<style>
body {
color: black;
}
</style>
一儲存就可以看到修改後的效果,不需要手動重新整理瀏覽器啦啦啦~\(≧▽≦)/~啦啦啦。
剛剛修改了webpack.config.js這個基本配置檔案中的入口配置,為了不修改這個基本配置檔案,我們在webpack.dev.conf.js檔案中需要改下配置:
var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path');
var webpack = require('webpack');
// 引入基本配置
var config = require('./webpack.config');
config.output.publicPath = '/';
config.plugins = [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
];
// 動態向入口配置中注入 webpack-hot-middleware/client
var devClient = 'webpack-hot-middleware/client';
Object.keys(config.entry).forEach(function (name, i) {
var extras = [devClient]
config.entry[name] = extras.concat(config.entry[name])
})
module.exports = config;
View Code
然後將 webpack.config.js 檔案中的入口配置修改為以下配置方式:
entry: {
index: [
path.resolve(__dirname, '../app/index/index.js')
]
},
重啟服務,修改 Favlist.vue 中的背景色,再次檢視瀏覽器,發現可以熱載入。到這裡還沒結束,這裡只是監聽到Favlist.vue檔案的改動,為了能監聽到index.html檔案的改動,我們還需要做一些工作。
第一步:在dev-server.js檔案中監聽html檔案改變事件,修改後的dev-server.js檔案如下:
// 引入必要的模組
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.dev.conf')
// 建立一個express例項
var app = express()
// 呼叫webpack並把配置傳遞過去
var compiler = webpack(config)
// 使用 webpack-dev-middleware 中介軟體
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: config.output.publicPath,
stats: {
colors: true,
chunks: false
}
})
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// webpack外掛,監聽html檔案改變事件
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
// 釋出事件
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
// 註冊中介軟體
app.use(devMiddleware)
// 註冊中介軟體
app.use(hotMiddleware)
// 監聽 8888埠,開啟伺服器
app.listen(8888, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:8888')
})
View Code
第二步:修改webpack.dev.conf.js檔案
var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path');
var webpack = require('webpack');
// 引入基本配置
var config = require('./webpack.config');
config.output.publicPath = '/';
config.plugins = [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
];
// 動態向入口配置中注入 webpack-hot-middleware/client
// var devClient = 'webpack-hot-middleware/client';
var devClient = './build/dev-client';
Object.keys(config.entry).forEach(function (name, i) {
var extras = [devClient]
config.entry[name] = extras.concat(config.entry[name])
})
module.exports = config;
View Code
檔案中修改了devClient變數,將 ‘webpack-hot-middleware/client’ 替換成 ‘./build/dev-client’,最終會導致,我們入口配置會變成下面這樣:
entry: {
index: [
'./build/dev-client',
path.resolve(__dirname, '../app/index/index.js')
]
},
第三步:新建build/dev-client.js檔案,並編輯如下內容:
var hotClient = require('webpack-hot-middleware/client')
// 訂閱事件,當 event.action === 'reload' 時執行頁面重新整理
hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})
這裡我們除了引入 ‘webpack-hot-middleware/client’ 之外訂閱了一個事件,當 event.action === ‘reload’ 時觸發,而在 dev-server.js 中有釋出的事件:
// webpack外掛,監聽html檔案改變事件
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
// 釋出事件
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
這樣,當我們的html檔案改變後,就可以監聽的到,最終會執行頁面重新整理,而不需要我們手動重新整理。看下效果:
至此,開發環境終於搞定了。
相關推薦
一步步構造自己的vue2.0+webpack環境
前面vue2.0和webpack都已經有接觸了些(vue.js入門, webpack入門之簡單例子跑起來 ),現在開始學習如何構造自己的vue2.0+webpack環境。 1.首先新建一個目錄vue-wkdemo,這是我們的專案目錄。執行 npm init 命令生成package.json檔案。執行np
vue2.0 + webpack+axios+elementUi+vue-router+vuex 搭建後臺管理系統環境部署(二)
前言 最近公司專案需要做一個小型的填報的錄入系統,根據業務的具體分析,採用了基於vue2.0 + webpack+axios+elementUi+vue-router+vuex全家桶的技術棧構建錄入系統,同時也作為學習vue全家桶技術棧的一個學習記錄。 專案初始化 第一
vue2.0 配置環境總結(都是淚啊)
fan all oba 都是 cnpm 2.0 git lex tex 最近有點空閑時間,終於把一直想學的vue提上了日程,以下是收集的一些幫助入門的鏈接 1:https://vuefe.cn/v2/guide/ vue2.0中文官網 2:https://ro
yoloV3一步步訓練自己的數據
圖片 cto file 目錄 好的 下載 ima 配置 自動 YOLOV3的主頁: https://pjreddie.com/darknet/yolo/ 運行主頁上的代碼得到: 首先使用一個開源的神經網絡框架Darknet,使用C和CUDA,有CPU和GPU兩種模式。
一步步打造自己的linux命令行計算器
參數轉換 時間 quit all 十進制 art pyc format chang 相信很多人,在工作中會需要使用到計算器。一般的做法是,打開並使用系統自帶的計算器。 這種做法可能對我來說,有如下幾個問題。 太慢。每次需要打開計算器,然後改成編程模式,手工選擇進制,再使用
一步步打造自己的linux命令列計算器
相信很多人,在工作中會需要使用到計算器。一般的做法是,開啟並使用系統自帶的計算器。 這種做法可能對我來說,有如下幾個問題。 太慢。每次需要開啟計算器,然後改成程式設計模式,手工選擇進位制,再使用輸入表示式進行計算。 需要切換視窗。程式設計時經常是在終端中,使用GUI計算器則意味著要離開終端,計算完畢再切換回
一步步建立自己的 iOS 框架
建立你的第一個iOS框架 如果你曾經試圖去建立一個自己的iOS框架的話,你應該知道這件事並不是那些畏懼困難的人能夠成功完成的-畢竟管理依賴和編寫測試並不容易。這篇文章將從開始到最終完成一步步的進行講解,以便你掌握後可以更好的建立自己的框架。 在教程中我們會構建一個框架,框架裡面會暴露一個名為RGBUICol
YOLO V3 一步步訓練自己的目標檢測
YOLO 的 Darknet 框架想必大家應該很熟悉,最近出了最新的 V3 版本,也看到網上有很多的“手把手訓練自己的資料”的部落格,感謝前輩們,自己也從中收益良多。但還是覺得有些粗糙,不夠詳細,尤其是像我們這樣的菜鳥,自己訓練自己的資料時候遇見了不少的坑,特整理分享出來。本
一步步教你搭建Android開發環境(有圖有真相)--“自吹自擂:史上最詳細、最囉嗦、最新的搭建教程”
宣告:轉摘請註明http://blog.csdn.net/longming_xu/article/details/28241045 前言:為什麼要寫這麼一篇文章?網上介紹Android開發環境搭建的文章一片一片的,我為什麼要自己”重複的去造輪子“呢?原因有三個:第一個
以太坊dApp開發教程(如何一步步構造一個全棧式去中心化應用)(四)實現投票功能
一、更新智慧合約 增加投票功能後的智慧合約如下: pragma solidity ^0.4.2; contract Election { //候選者結構體 struct Candidate { uint id; string name; uint vot
Android -- 從原始碼的角度一步步打造自己的TextView
package com.qianmo.activitydetail; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.
Vue2.0 從環境搭建到釋出(新手完全填坑攻略)
【重點】後來發現這些坑是由於 npm 不是最新的版本3.10.2, 用 npm 3.9.5就會出現以下坑 解決辦法: 請執行以下命令 npm update -g 報錯 Error: Cannot find module 'opn' Error: Cannot find module 'webpack
Node.js+Vue2.0+webpack(axios獲取資料)
使用 npm安裝axios $ npm install axios 安裝好之後進入檔案node_modules/axios檢視是否存在 進入到main.js裡面進行相關配置 以下有兩種請求方法: (1)匯入axios直接請求
一步步製作 Arm-Linux交叉編譯環境
我們使用以下版本的檔案為例子建立 arm-linux 交叉編譯環境: 編譯環境 redhat 7.2 或 8.0 binutils-2.14.tar.gz ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.g
一步步搭建自己的部落格網站
原材料:1.Linux伺服器2.域名(可無)3.部落格系統首先使用Xshell連線Linux伺服器(CentOS 7.4 X64)執行命令:下載並安裝(寶塔):yum install -y wget && wget -O install.sh http://d
Vue2.0新手入坑環境搭建(一)
clas min 團隊 定義 自定義 ini 創建 https idt 每周不定期更新 專業團隊接APP 外包 聯系QQ1129580542 vue-cli 是一個官方發布 vue.js 項目腳手架,使用 vue-cli 可以快速創建 vue 項目,GitHu
從壹開始前後端分離 [ Vue2.0+.NET Core2.1] 二十一║Vue實戰:開發環境搭建【詳細版】
緣起 哈嘍大家好,兜兜轉轉終於來到了Vue實戰環節,前邊的 6 篇關於Vue基礎文章我剛剛簡單看了看,感覺寫的還是不行呀,不是很系統,所以大家可能看上去比較累,還是得抽時間去潤潤色,修改修改語句和樣式,至少也得對得住粉絲哈,應該給部落格園官方提個小建議,要是能允許好友或者其他人修改文章的功能就好了,比如百
vue2.0學習筆記(一)搭建學習環境
1.0 環境 doc html 指定 har 表達 follow html元素 搭建一個學習的環境,盡量減少高階知識幹擾再一個HTML界面中引入cdn庫,比如: 代碼:`<!DOCTYPE html><html><head><met
vue2.0+vue-router2.0+axios+webpack開發webapp專案(一)
前言:本人第一次將vue運用到實際專案中,將實際開發流程簡單描述下(第一次寫部落格,有問題希望及時提出,討厭噴子。) 一.安裝node環境 首先我們需要安裝node環境,這個想必不用多說,可以直接到中文官網http://nodejs.cn/下載安裝包。其
搭建vue2.0+vuex+vue-router+babel+webpack環境
簡單的自建流程 1、 建立專案目錄 2、 git 倉儲 git init 3、 寫.gitignore .gitignore node_modules npm-debug.log .idea 4、 npm ini