vue現(xiàn)代化使用方法(一)

vue現(xiàn)代化使用方法(一)

目前前端開發(fā)已經(jīng)非常類似GUI開發(fā)晶疼,前端人員需要了解大量業(yè)務(wù)邏輯啤它,通過不同的頁面交互行為給用戶展示不同的界面或者引導(dǎo)用戶進(jìn)行不同的操作粘勒,這必然造成前端邏輯的繁重化横殴,如何簡(jiǎn)單高效的維護(hù)開發(fā)代碼是每個(gè)前端開發(fā)人員應(yīng)該思考的問題昆禽。
內(nèi)容整理中尚粘,會(huì)隨時(shí)變更

安裝

Vue引入到項(xiàng)目中择卦,有兩種方法:

  • 通過<script>標(biāo)簽引入
  • 通過npm方式引入

通過<script>標(biāo)簽引入

Vue當(dāng)作普通腳本,通過外部js的方式引入到指定頁面,這時(shí)Vue會(huì)被注冊(cè)成為一個(gè)全局變量秉继。
在這種方式中潘明,可以把vue下載到本地,或者使用線上CDN秕噪。此外還要注意引入的Vue是開發(fā)版本钳降,還是生產(chǎn)版本,兩者區(qū)別在于生產(chǎn)版本下不會(huì)顯示友好錯(cuò)誤提示腌巾,測(cè)試環(huán)境下建議使用開發(fā)版本遂填。

通過npm方式引入

通過npm install vue把vue引入到項(xiàng)目中,再結(jié)合webpack或者rollup使用澈蝙。

通過標(biāo)簽方式引入vue的方法吓坚,只適合學(xué)習(xí)或者做demo用,實(shí)際項(xiàng)目中不建議那么做灯荧,建議通過npm方式引入vue礁击。

構(gòu)建一個(gè)hello world

本部分會(huì)結(jié)合webpack構(gòu)建一個(gè)以vue組件為基礎(chǔ)的初始項(xiàng)目。

結(jié)合webpack構(gòu)建項(xiàng)目

webpack使用教程逗载,參考webpack使用詳解
node使用教程哆窿,參考node使用詳解
babel使用教程,參考babel使用詳解

  1. 安裝node

  2. 在任意文件夾下創(chuàng)建如下結(jié)構(gòu)的hello-world項(xiàng)目(包含src和dist兩個(gè)文件夾)

    hello-world
        src
            containers
                hello-world
                    index.js
                    index.vue
            template
                base-vue.html
        dist
    
  3. 在hello-world目錄下運(yùn)行npm init -y厉斟,構(gòu)建項(xiàng)目的package.json

  4. 安裝vue挚躯,運(yùn)行npm install vue --save(Vue是項(xiàng)目的運(yùn)行時(shí)的依賴庫,所以使用--save)

  5. 安裝babel擦秽,運(yùn)行npm install --save-dev babel-preset-latest(安裝最新的轉(zhuǎn)碼規(guī)則)码荔,運(yùn)行npm install --save-dev babel-preset-stage-2(安裝處于草案的編碼規(guī)則,處于草案階段的編碼規(guī)則基本可以使用,再有修改也只是進(jìn)行增量更改)感挥,創(chuàng)建.babelrc文件缩搅,把新增的編碼規(guī)范寫入.babelrc文件中

    {
        "presets": ["es2015","stage-2"]
    }
    

安裝babel-cli:npm install --save-dev babel-cli,讓我們可以使用命令行代碼的形式進(jìn)行轉(zhuǎn)碼

  1. 安裝webpack触幼,運(yùn)行npm install --save-dev webpack

  2. 安裝html-webpack-plugin(支持通過模版生成html文件,簡(jiǎn)化html文件的創(chuàng)建)硼瓣,運(yùn)行npm install --save-dev html-webpack-plugin

  3. 安裝vue-loader(把.vue文件轉(zhuǎn)成js文件),運(yùn)行npm install --save-dev vue-loader,安裝babel-loader域蜗,運(yùn)行npm install --save-dev babel-loader

  4. 創(chuàng)建webpack.config.js巨双,內(nèi)容如下

    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
        entry: {
            app: './src/containers/hello-world/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: '[name].js'
        },
        module: {
            rules: [
                {test: /\.(js|jsx)$/, use: 'babel-loader'},
                {test: /\.vue/, use: 'vue-loader'}
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                title: '這是一個(gè)新標(biāo)題',
                filename: 'index.html',
                template: './src/template/base-vue.html'
            })
        ]
    };
    
  5. 在index.js噪猾,創(chuàng)建內(nèi)容如下

    import Vue from 'vue';
    import app from './index.vue';
    
    new Vue({
        el: "#app",
        render: h => h(app)
    }); 
    
  6. 在index.vue霉祸,創(chuàng)建內(nèi)容如下

    <template>
        <div class="wrap">
            <p>{{info}}</p>
        </div>
    </template>
    <script>
        export default {
            data () {
                return {
                    info: 'Hello world!'
                }
            }
        }
    </script>   
    
  7. 在package.json中script,添加一個(gè)build命令

    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "./node_modules/.bin/webpack --config webpack.config.js"
    },
    
  8. 在項(xiàng)目所在目錄的終端運(yùn)行npm run build袱蜡,這時(shí)終端一般會(huì)報(bào)如下錯(cuò)誤

    Module build failed: Error: Cannot find module 'vue-template-compiler'
    

原因是我們通過npm install vue安裝的版本是運(yùn)行時(shí)版本丝蹭,不包括編譯部分,而我們?cè)趇ndex.vue中又使用了template模板的形式坪蚁,所以會(huì)報(bào)這個(gè)錯(cuò)誤奔穿,解決辦法就是安裝這個(gè)依賴镜沽。運(yùn)行npm install --save-dev vue-template-compiler,安裝成功后贱田,再次運(yùn)行npm run build項(xiàng)目就可以運(yùn)行通過缅茉,這時(shí)在dist目錄下就會(huì)有兩個(gè)構(gòu)建的文件

```
dist
    app.js
    index.html
```

在瀏覽器運(yùn)行dist下index.html,瀏覽器中就出現(xiàn)我們期望輸出的Hello world!

到此男摧,我們就創(chuàng)建了一個(gè)比較現(xiàn)代化的項(xiàng)目蔬墩,里面包含了webpack,babel的一些基礎(chǔ)使用耗拓,但功能上還差點(diǎn)拇颅,我們繼續(xù)完善。

安裝webpack-dev-server

運(yùn)行npm install --save-dev webpack-dev-server
webpack-dev-server是配合webpack使用乔询,提供實(shí)時(shí)重新加載的服務(wù)器樟插,其內(nèi)部使用webpack-dev-middleware。

webpack-dev-middleware提供了通過內(nèi)存快速訪問webpack資源的能力竿刁,同時(shí)有以下優(yōu)點(diǎn):
沒有文件寫入磁盤黄锤,在內(nèi)存中處理文件;
如果在觀察模式下更改了文件食拜,頁面會(huì)停止請(qǐng)求猜扮,直到編譯完成;
支持熱模塊重載(HMR)监婶;

package.json中scripts添加webpack-dev-server啟動(dòng)操作

"scripts": {
    ...
    "open": "webpack-dev-server --open"
  },

在webpack.config.js添加webpack-dev-server運(yùn)行參數(shù)

module.exports = {
    ...
    devServer: {
        contentBase: './dist', // webpack-dev-server服務(wù)器啟動(dòng)后的目錄
        hot: true // 開啟熱替換
    },
    ...
    plugins: [
        ...
        new webpack.HotModuleReplacementPlugin({}) // 啟用熱更新
    ]
    ...
};

在這里旅赢,我們使用的是inline模式來自動(dòng)刷新頁面,并通過Nodejs API方式運(yùn)行inline模式惑惶,具備可以參考webpack使用部分介紹

安裝npm-run-all

到此我們會(huì)發(fā)現(xiàn)煮盼,我們的項(xiàng)目需要通過兩次命令行操作才能正常運(yùn)行起來:

npm run build
npm run open

使用起來會(huì)有些煩瑣,這里可以使用npm-run-all把多個(gè)npm scripts命令串起來(也可以在npm scripts中通過&符把多個(gè)腳本串起來带污,不過這個(gè)看起來不方便)

運(yùn)行npm install --save-dev npm-run-all

在package.json中的scripts下添加命令

"scripts": {
    ...
    "start": "npm-run-all --parallel build open"
 }

在項(xiàng)目目錄下僵控,運(yùn)行npm start,現(xiàn)在我們構(gòu)建了一個(gè)具備熱更新和自動(dòng)重新加載的項(xiàng)目鱼冀,一切看起來很酷报破,不過還有一個(gè)問題需要解決,我們發(fā)現(xiàn)每一次頁面文件的改動(dòng)都會(huì)在dist文件下生成相關(guān)熱更新的文件千绪,大概文件名如:

...hot-update...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末充易,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荸型,更是在濱河造成了極大的恐慌盹靴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異稿静,居然都是意外死亡梭冠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門改备,熙熙樓的掌柜王于貴愁眉苦臉地迎上來控漠,“玉大人,你說我怎么就攤上這事悬钳∪罅常” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵他去,是天一觀的道長毙驯。 經(jīng)常有香客問我,道長灾测,這世上最難降的妖魔是什么爆价? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮媳搪,結(jié)果婚禮上铭段,老公的妹妹穿的比我還像新娘。我一直安慰自己秦爆,他們只是感情好序愚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著等限,像睡著了一般爸吮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上望门,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天形娇,我揣著相機(jī)與錄音,去河邊找鬼筹误。 笑死桐早,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厨剪。 我是一名探鬼主播哄酝,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼祷膳!你這毒婦竟也來了陶衅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤钾唬,失蹤者是張志新(化名)和其女友劉穎万哪,沒想到半個(gè)月后侠驯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抡秆,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奕巍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儒士。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片的止。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖着撩,靈堂內(nèi)的尸體忽然破棺而出诅福,到底是詐尸還是另有隱情,我是刑警寧澤拖叙,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布氓润,位于F島的核電站,受9級(jí)特大地震影響薯鳍,放射性物質(zhì)發(fā)生泄漏咖气。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一挖滤、第九天 我趴在偏房一處隱蔽的房頂上張望崩溪。 院中可真熱鬧,春花似錦斩松、人聲如沸伶唯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乳幸。三九已至,卻和暖如春钧椰,著一層夾襖步出監(jiān)牢的瞬間反惕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工演侯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姿染,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓秒际,卻偏偏與公主長得像悬赏,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娄徊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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