欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue2.0+webpack環(huán)境的構(gòu)造過程

 更新時(shí)間:2016年11月08日 13:39:09   作者:wj704  
本文分步驟給大家介紹了vue2.0+webpack環(huán)境的構(gòu)造過程的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下

本文給大家介紹vue2.0+webpack環(huán)境構(gòu)造過程。

1.首先新建一個(gè)目錄vue-wkdemo,這是我們的項(xiàng)目目錄。執(zhí)行 npm init 命令生成package.json文件。執(zhí)行npm init之后,會(huì)提示你填寫一些項(xiàng)目的信息,一直回車默認(rèn)就好了,或者直接執(zhí)行 npm init -y 直接跳過詢問步驟。

2.安裝項(xiàng)目依賴項(xiàng)

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 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;//開啟錯(cuò)誤提示
window.onload = function () {
new Vue({
el: '#app',
components: {
'my-component': Favlist
}
});
}

4.構(gòu)建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.構(gòu)建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.構(gòu)建 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()方法,可以結(jié)合我們給定的兩個(gè)參數(shù)最后生成絕對(duì)路徑,最終指向的就是我們的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 結(jié)尾的文件
{
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
})
]
}

7.運(yùn)行構(gòu)建命令 :

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

可以看到輸出文件:

8.到這里,我們的目錄結(jié)構(gòu)為:

運(yùn)行output->static->index.html這個(gè)文件,過程中遇到各種各樣的坑(省略幾百字。。。)

最后終于看到結(jié)果了?。?!

9.問題來了,每次都需要運(yùn)行構(gòu)建命令才能查看改變后的代碼效果,這是很沒有效率,于是還需要安裝 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中間件,它是對(duì)webpack一個(gè)簡單的包裝,它可以通過連接服務(wù)器服務(wù)那些從webpack發(fā)射出來的文件,它有一下幾點(diǎn)好處:

1、不會(huì)向硬盤寫文件,而是在內(nèi)存中,注意我們構(gòu)建項(xiàng)目實(shí)際就是向硬盤寫文件。

2、當(dāng)文件改變的時(shí)候,這個(gè)中間件不會(huì)再服務(wù)舊的包,你可以直接刷新瀏覽器就能看到最新的效果,這樣你就不必等待構(gòu)建的時(shí)間,所見即所得。

在build目錄中創(chuàng)建一個(gè)dev-server.js文件,并寫入內(nèi)容:

// 引入必要的模塊
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.config')
// 創(chuàng)建一個(gè)express實(shí)例
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
}
})
// 注冊(cè)中間件
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 配置文件

① 將 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 修改為 ‘a(chǎn)pp/index/index.html'

plugins: [
new HtmlWebpackPlugin({
filename: 'app/index/index.html',
template: path.resolve(__dirname, '../app/index/index.html'),
inject: true
})
]

此時(shí),我們?cè)陧?xiàng)目根目錄運(yùn)行下面的命令,開啟服務(wù):

node build/dev-server.js

在瀏覽器中輸入 http://localhost:8888/app/index/index.html,如果成功了將和前面本地運(yùn)行output->static->index.html這個(gè)文件的結(jié)果是一樣一樣的

不信?

為了不去修改webpack.config.js,在build目錄下新建一個(gè)webpack.dev.conf.js文件,意思是開發(fā)模式下要讀取的配置文件,并寫入一下內(nèi)容:

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;

這樣在dev環(huán)境下的配置文件覆蓋了基本配置文件,只需要在dev-server.js中將

var config = require('./webpack.config')

改為:

var config = require('./webpack.dev.conf')

到這里,我們已經(jīng)使用webpack-dev-middleware 搭建基本的開發(fā)環(huán)境了,但是每次修改代碼后,還是需要我們手動(dòng)刷新瀏覽器,接下來介紹熱加載(所謂的熱加載,意思就是說能夠追蹤我們代碼的變化,并自動(dòng)更新界面,甚至還能保留程序狀態(tài)。),我們需要 webpack-hot-middleware 中間件來完成熱加載。

配合 webpack-dev-middleware 使用,我們還需要做的是:

第一步:安裝(上面我們已經(jīng)安裝過)

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

第二步:在 webpack.dev.conf.js 配置文件中添加三個(gè)插件,如下:

var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path');
var webpack = require('webpack');
// 引入基本配置
var config = require('./webpack.config');
config.output.publicPath = '/';
config.plugins = [
// 添加三個(gè)插件
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')
// 創(chuàng)建一個(gè)express實(shí)例
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
}
})
// 使用 webpack-hot-middleware 中間件
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// 注冊(cè)中間件
app.use(devMiddleware)
// 注冊(cè)中間件
app.use(hotMiddleware)
// 監(jiān)聽 8888端口,開啟服務(wù)器
app.listen(8888, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:8888')
})

現(xiàn)在重啟的服務(wù),然后修改 Favlist.vue 中的頁面顏色為 ‘black':

<style>
body {
color: black;
}
</style>

一保存就可以看到修改后的效果,不需要手動(dòng)刷新瀏覽器啦啦啦~\(≧▽≦)/~啦啦啦。

剛剛修改了webpack.config.js這個(gè)基本配置文件中的入口配置,為了不修改這個(gè)基本配置文件,我們?cè)趙ebpack.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
})
];
// 動(dòng)態(tài)向入口配置中注入 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;

然后將 webpack.config.js 文件中的入口配置修改為以下配置方式:

entry: {
index: [
path.resolve(__dirname, '../app/index/index.js')
]
},

重啟服務(wù),修改 Favlist.vue 中的背景色,再次查看瀏覽器,發(fā)現(xiàn)可以熱加載。到這里還沒結(jié)束,這里只是監(jiān)聽到Favlist.vue文件的改動(dòng),為了能監(jiān)聽到index.html文件的改動(dòng),我們還需要做一些工作。

第一步:在dev-server.js文件中監(jiān)聽html文件改變事件,修改后的dev-server.js文件如下:

// 引入必要的模塊
var express = require('express')
var webpack = require('webpack')
var config = require('./webpack.dev.conf')
// 創(chuàng)建一個(gè)express實(shí)例
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
}
})
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// webpack插件,監(jiān)聽html文件改變事件
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
// 發(fā)布事件
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
// 注冊(cè)中間件
app.use(devMiddleware)
// 注冊(cè)中間件
app.use(hotMiddleware)
// 監(jiān)聽 8888端口,開啟服務(wù)器
app.listen(8888, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:8888')
})

第二步:修改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
})
];
// 動(dòng)態(tài)向入口配置中注入 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;

文件中修改了devClient變量,將 ‘webpack-hot-middleware/client' 替換成 ‘./build/dev-client',最終會(huì)導(dǎo)致,我們?nèi)肟谂渲脮?huì)變成下面這樣:

entry: {
index: [
'./build/dev-client',
path.resolve(__dirname, '../app/index/index.js')
]
},

第三步:新建build/dev-client.js文件,并編輯如下內(nèi)容:

var hotClient = require('webpack-hot-middleware/client')
// 訂閱事件,當(dāng) event.action === 'reload' 時(shí)執(zhí)行頁面刷新
hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})

這里我們除了引入 ‘webpack-hot-middleware/client' 之外訂閱了一個(gè)事件,當(dāng) event.action === ‘reload' 時(shí)觸發(fā),而在 dev-server.js 中有發(fā)布的事件:

// webpack插件,監(jiān)聽html文件改變事件
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
// 發(fā)布事件
hotMiddleware.publish({ action: 'reload' })
cb()
})
})

這樣,當(dāng)我們的html文件改變后,就可以監(jiān)聽的到,最終會(huì)執(zhí)行頁面刷新,而不需要我們手動(dòng)刷新。看下效果:

至此,開發(fā)環(huán)境終于搞定了。

以上所述是小編給大家介紹的vue2.0+webpack環(huán)境的構(gòu)造過程,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue.js實(shí)現(xiàn)文章評(píng)論和回復(fù)評(píng)論功能

    Vue.js實(shí)現(xiàn)文章評(píng)論和回復(fù)評(píng)論功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)文章評(píng)論和回復(fù)評(píng)論功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue實(shí)現(xiàn)循環(huán)切換動(dòng)畫

    vue實(shí)現(xiàn)循環(huán)切換動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)循環(huán)切換動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Vue中的變量賦值問題

    Vue中的變量賦值問題

    這篇文章主要介紹了Vue中的變量賦值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue中@change兼容問題詳解

    vue中@change兼容問題詳解

    這篇文章主要介紹了vue中@change兼容問題詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • VUE UPLOAD 通過ACTION返回上傳結(jié)果操作

    VUE UPLOAD 通過ACTION返回上傳結(jié)果操作

    這篇文章主要介紹了VUE UPLOAD 通過ACTION返回上傳結(jié)果操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue常用的數(shù)字孿生可視化的自適應(yīng)方案

    vue常用的數(shù)字孿生可視化的自適應(yīng)方案

    這篇文章主要為大家介紹了vue常用的數(shù)字孿生可視化的自適應(yīng)方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue源碼解析computed多次訪問會(huì)有死循環(huán)原理

    vue源碼解析computed多次訪問會(huì)有死循環(huán)原理

    這篇文章主要為大家介紹了vue源碼解析computed多次訪問會(huì)有死循環(huán)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Vue 第三方字體圖標(biāo)引入 Font Awesome的方法

    Vue 第三方字體圖標(biāo)引入 Font Awesome的方法

    今天小編就為大家分享一篇Vue 第三方字體圖標(biāo)引入 Font Awesome的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue實(shí)現(xiàn)購物車完整功能

    vue實(shí)現(xiàn)購物車完整功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)購物車完整功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue+ts大文件切片上傳的實(shí)現(xiàn)示例

    vue+ts大文件切片上傳的實(shí)現(xiàn)示例

    在Vue項(xiàng)目中,大圖片和多數(shù)據(jù)Excel等大文件的上傳是一個(gè)非常常見的需求,本文主要介紹了vue+ts大文件切片上傳,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論