1. 程式人生 > >一步步構造自己的vue2.0+webpack環境

一步步構造自己的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