利用WebPack構(gòu)建VUE項目

一、構(gòu)建項目

1,首先新建一個目錄嗦哆,名為 myProject ,這是我們的項目根目錄婿滓。然后在根目錄下使用 ****npm init -y**** 命令老速,在我們的項目中生成 package.json 文件,因為我們的項目要有很多依賴凸主,都是通過npm來管理的橘券,而npm對于我們項目的管理,則是通過package.json文件卿吐。

2旁舰,我們新建一個叫做 app 的目錄,這個是我們頁面模塊的目錄嗡官,再在app目錄下建立一個index目錄箭窜,假設(shè)這個是首頁模塊的目錄,然后再在index目錄下建立一個 index.html 文件和 index.js 文件衍腥,分別是首頁入口html文件和主js文件磺樱,然后再在index目錄下建立一個components目錄,這個目錄用作存放首頁組件模塊的目錄婆咸,因為我們最終要實現(xiàn)組件化開發(fā)竹捉。

二、通過****npm****安裝項目依賴項在根目錄(myProject)下執(zhí)行以下命令

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 babel-runtime@5 --save-dev

npm install vue --save

完成后尚骄,你的package.json應(yīng)該是這樣的:

{
  "name": "myProject",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "vue": "^1.0.28"
  },
  "devDependencies": {
    "babel-core": "^6.14.0",
    "babel-loader": "^6.2.5",
    "babel-plugin-transform-runtime": "^6.15.0",
    "babel-preset-es2015": "^6.14.0",
    "babel-runtime": "^5.8.38",
    "css-loader": "^0.25.0",
    "vue-hot-reload-api": "^2.0.6",
    "vue-html-loader": "^1.2.3",
    "vue-loader": "^8.5.4",
    "vue-style-loader": "^1.0.0",
    "webpack": "^1.13.2",
    "webpack-dev-server": "^1.16.1"
  }
}

我們安裝了 babel 一系列包块差,用來解析ES6語法,因為我們使用ES6來開發(fā)項目,如果你不了解ES6語法憾儒,建議你看一看阮老師的教程询兴,然后我們安裝了一些loader包乃沙,比如css-loader/vue-loader等等起趾,因為webpack是使用這些指定的loader去加載指定的文件的。

另外我們還使用 npm install vue –save 命令安裝了 vue 警儒,這個就是我們要在項目中使用的vue.js训裆,我們可以直接像開發(fā)nodejs應(yīng)用一樣,直接require(‘vue’);即可蜀铲,而不需要通過script標(biāo)簽引入边琉,這一點在開發(fā)中很爽。

三记劝,編輯****html****变姨、****js****、****vue****文件**

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>
  <!-- vue的組件以自定義標(biāo)簽的形式使用 -->
  <favlist></favlist>
 </body>
</html>

index.js

import Vue from 'Vue'
import Favlist from './components/Favlist'

new Vue({
 el: 'body',
 components: { Favlist }
})

Favlist.vue

****3****厌丑、在****components****目錄下新建一個**** Favlist.vue ****文件定欧,作為我們的第一個組件********

<template>
    <div v-for="n in 10">div</div>
</template>

<script>
    export default {
        data () {
            return {
                msg: 'Hello World!'
            }
        }
    }
</script>

<style>
    html{
        background: red;
    }
</style>

我們在index.html中使用了自定義標(biāo)簽(即組件),然后在index.js中引入了Vue和我們的Favlist.vue組件怒竿,F(xiàn)avlist.vue文件中砍鸠,我們使用了基本的vue組件語法,最后耕驰,我們希望它運行起來爷辱,這個時候,我們就需要webpack了朦肘。

四饭弓、配置****webpack****服務(wù)**

1、在項目根目錄下新建 build 目錄媒抠,用來存放我們的構(gòu)建相關(guān)的代碼文件等

2弟断、然后在build目錄下新建 webpack.config.js 這是我們的webpack配置文件,webpack需要通過讀取你的配置领舰,進行相應(yīng)的操作夫嗓。

webpack.config.js

// nodejs 中的path模塊
var path = require('path');

module.exports = {
    // 入口文件,path.resolve()方法冲秽,可以結(jié)合我們給定的兩個參數(shù)最后生成絕對路徑舍咖,最終指向的就是我們的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']
    },
    module: {
        
        loaders: [
            // 使用vue-loader 加載 .vue 結(jié)尾的文件
            {
                test: /\.vue$/, 
                loader: 'vue'   
            },
            {
                test: /\.js$/,
                loader: 'babel?presets=es2015',
                exclude: /node_modules/
            }
        ]
    }
}

3、構(gòu)建項目

上例中锉桑,相信你已經(jīng)看懂了我的配置排霉,入口文件是index.js文件,配置了相應(yīng)輸出民轴,然后使用 vue-loader 去加載 .vue 結(jié)尾的文件攻柠,接下來我們就可以構(gòu)建項目了球订,我們可以在命令行中執(zhí)行:

webpack --display-modules --display-chunks --config build/webpack.config.js

這個時候,我們修改 index.html 瑰钮,將輸出的js文件引入:
注意:html中的script標(biāo)簽的src路徑為你項目根目錄中生成的output->static->main.xxxxx.js,哈希值是不同的冒滩,故需要手動修改下

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>
  <!-- vue的組件以自定義標(biāo)簽的形式使用 -->
  <favlist></favlist>

  <script src="../../output/static/main.ce853b65bcffc3b16328.js"></script>
 </body>
</html>

此時,你的Vue已經(jīng)能夠渲染出來了浪谴。但是开睡,也有一個很嚴(yán)重的問題就是,你每次修改后苟耻,都要重新構(gòu)建項目篇恒,生成一個main.xxx.js文件,這顯然不是我們要達到的目的凶杖。而webpack也不會這么的愚蠢胁艰,所以我們需要安裝幾個webpack插件來解決這個問題

五,添加node服務(wù),實現(xiàn)webpack的打包加載

1.首先安裝 html-webpack-plugin 插件:
在根目錄下輸入命令安裝:

npm install html-webpack-plugin --save-dev

2.修改build文件就夾的webpack.config.js文件

// nodejs 中的path模塊
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
 // 入口文件智蝠,path.resolve()方法腾么,可以結(jié)合我們給定的兩個參數(shù)最后生成絕對路徑,最終指向的就是我們的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']
 },
 module: {

  loaders: [
   // 使用vue-loader 加載 .vue 結(jié)尾的文件
   {
    test: /\.vue$/,
    loader: 'vue'
   },
   {
    test: /\.js$/,
    loader: 'babel?presets=es2015',
    exclude: /node_modules/
   }
  ]
 },
 plugins: [
  new HtmlWebpackPlugin({
   filename: '../index.html',
   template: path.resolve(__dirname, '../app/index/index.html'),
   inject: true
  })
 ]
}

根目錄下再次執(zhí)行構(gòu)建命令:

webpack --display-modules --display-chunks --config build/webpack.config.js

構(gòu)建完成后寻咒,應(yīng)該在輸出目錄哮翘,多出來一個index.html文件,雙擊它毛秘,代碼正確執(zhí)行饭寺,你可以打開這個文件查看一下,webpack自動幫我們引入了相應(yīng)的文件叫挟。

問題繼續(xù)來了艰匙,難道每次我們都要構(gòu)建之后才能查看運行的代碼嗎?那豈不是很沒有效率?別急

3.安裝 webpack-dev-middleware中間件和webpack-hot-middleware中間件抹恳,進行加載

1)

npm install webpack-dev-middleware webpack-hot-middleware --save-dev

2)

npm install express --save-dev

4员凝,下面我們在build目錄中創(chuàng)建一個 dev-server.js 的文件,并寫入一下內(nèi)容:

// 引入必要的模塊
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.config')

// 創(chuàng)建一個express實例
var app = express()

// 調(diào)用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)

// 監(jiān)聽 8888端口奋献,開啟服務(wù)器
app.listen(8888, function (err) {
    if (err) {
        console.log(err)
        return
    }
    console.log('Listening at http://localhost:8888')
})

別急我們要對我們的 webpack.config.js 配置文件做兩處修改:
1)將 config.output.publicPath 修改為 ‘/‘:
2)將 plugins 中 HtmlWebpackPlugin 中的 filename 修改為 ‘a(chǎn)pp/index/index.html’

此時在項目根目錄執(zhí)行以下命令啟動服務(wù):
命令:

node build/dev-server.js

當(dāng)看到如下提示健霹,則代表開啟服務(wù)成功了:

Listening at http://localhost:8888
Hash: 2b9c279685625d1c9154
Version: webpack 1.13.2
Time: 7888ms
                       Asset       Size  Chunks             Chunk Names
main.2b9c279685625d1c9154.js     287 kB       0  [emitted]  main
               ../index.html  439 bytes          [emitted]
Child html-webpack-plugin for "../index.html":
            Asset    Size  Chunks       Chunk Names
    ../index.html  552 kB       0
webpack: bundle is now VALID.

服務(wù)啟動成功,接下來就可以打開瀏覽器瓶蚂,輸入:
http://localhost:8888/app/index/index.html

OK糖埋,大功告成,今天就到這里窃这,當(dāng)開啟服務(wù)后瞳别,你每次修改代碼保存后直接刷新頁面即可看到顯示。

目前為止并沒有啟動真正的熱加載模式(代碼保存后瀏覽器自動更新頁面而不需手動刷新的模式),實際因為現(xiàn)在熱加載模式開發(fā)還有很多問題祟敛,且當(dāng)項目越來越大時疤坝,延遲越來越嚴(yán)重,機器負(fù)載也很大馆铁,故還沒完善前就先不寫出來了跑揉,另外大家也可以去多探索探索!祝大家好運

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叼架,一起剝皮案震驚了整個濱河市畔裕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乖订,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件具练,死亡現(xiàn)場離奇詭異乍构,居然都是意外死亡,警方通過查閱死者的電腦和手機扛点,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門哥遮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陵究,你說我怎么就攤上這事眠饮。” “怎么了铜邮?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵仪召,是天一觀的道長。 經(jīng)常有香客問我松蒜,道長扔茅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任秸苗,我火速辦了婚禮召娜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惊楼。我一直安慰自己玖瘸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布檀咙。 她就那樣靜靜地躺著雅倒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攀芯。 梳的紋絲不亂的頭發(fā)上屯断,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼殖演。 笑死氧秘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趴久。 我是一名探鬼主播丸相,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彼棍!你這毒婦竟也來了灭忠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤座硕,失蹤者是張志新(化名)和其女友劉穎弛作,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體华匾,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡映琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜘拉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨西。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旭旭,靈堂內(nèi)的尸體忽然破棺而出谎脯,到底是詐尸還是另有隱情,我是刑警寧澤持寄,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布源梭,位于F島的核電站,受9級特大地震影響际看,放射性物質(zhì)發(fā)生泄漏咸产。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一仲闽、第九天 我趴在偏房一處隱蔽的房頂上張望脑溢。 院中可真熱鬧,春花似錦赖欣、人聲如沸屑彻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社牲。三九已至,卻和暖如春悴了,著一層夾襖步出監(jiān)牢的瞬間搏恤,已是汗流浹背违寿。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熟空,地道東北人藤巢。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像息罗,于是被迫代替她去往敵國和親掂咒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容