1. 程式人生 > >vue.js+webpack在一個簡單實例中的使用過程demo

vue.js+webpack在一個簡單實例中的使用過程demo

logo python2 === 版本 3.3 html fall ins 搭建

這裏主要記錄vue.js+webpack在一個簡單實例中的使用過程

說明:本次搭建基於Win 7平臺

Node.js 安裝
官網提供了支持多種平臺的的LTS版本下載,我們根據需要來進行下載安裝。對於Windows平臺提供了.mis和.zip(二進制)兩種選擇,我們可以根據自己需要任選一種安裝。具體安裝過程就不詳說。

註意:為了使用方便,我們需要檢測PATH環境變量是否配置了Node.js。點擊開始=》運行=》輸入“cmd”=》輸入命令“path”(我們也可以直接使用命令win+R輸入“cmd”=》輸入命令“path”),輸出如下結果:

C:\Users\01107267>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
D:\Program Files\java\jdk1.8.0-windows-x64\bin;D:\Program Files\java\jdk1.8.0-windows-x64\jre\bin;
D:\Program Files\TortoiseSVN\bin;D:\Program Files\apache-maven-3.3.9\bin;D:\Program Files\gradle-2.2.1\BIN;

D:\Python27\Scripts;D:\Python27\;D:\Program Files\nodejs\;D:\Program Files\nodejs\node_global;
1
2
3
4
5
我們看到環境變量中已經包含了D:\Program Files\nodejs,我們可以檢查一下Node.js版本

C:\Users\01107267>node --version
v6.9.4
1
2
我們可以看到有這樣一個路徑在Node.js目錄下還有一個npm,這是Nodejs中的包管理工具,它是隨Nodejs一起安裝的

C:\Users\01107267>npm -v
3.10.10
1
2
這裏需要說明的是可以看到還有一個路徑D:\Program Files\nodejs\node_global;這個路徑是說將npm安裝時指定全局安裝的包放在該路徑下,比如後面我們會用的webpack,我們可以去到該目錄看一下

D:\Program Files>cd nodejs

D:\Program Files\nodejs>dir
驅動器 D 中的卷沒有標簽。
卷的序列號是 0005-FCB7

D:\Program Files\nodejs 的目錄

2017/03/12 11:52<DIR .
2017/03/12 11:52<DIR ..
2017/01/05 21:0018,513,048 node.exe
2016/12/22 18:01 702 nodevars.bat
2017/08/07 19:29<DIR node_cache
2017/01/05 20:46 8,997 node_etw_provider.man
2017/08/08 09:49<DIR node_global
2017/01/16 10:57<DIR node_modules
2016/12/22 18:01 4,974 node_perfctr_provider.man
2016/11/16 19:45 867 npm
2016/11/16 19:45 483 npm.cmd
6 個文件 18,529,071 字節
5 個目錄 146,669,424,640 可用字節

D:\Program Files\nodejs>cd node_global

D:\Program Files\nodejs\node_global>dir
驅動器 D 中的卷沒有標簽。
卷的序列號是 0005-FCB7

D:\Program Files\nodejs\node_global 的目錄

2017/08/08 09:49<DIR .
2017/08/08 09:49<DIR ..
2017/03/12 11:56<DIR etc
2017/08/08 09:49<DIR node_modules
2017/08/07 17:46 321 vue
2017/08/07 17:46 333 vue-build
2017/08/07 17:46 210 vue-build.cmd
2017/08/07 17:46 331 vue-init
2017/08/07 17:46 208 vue-init.cmd
2017/08/07 17:46 331 vue-list
2017/08/07 17:46 208 vue-list.cmd
2017/08/07 17:46 198 vue.cmd
2017/08/08 09:49 335 webpack
2017/08/08 09:49 379 webpack-dev-server
2017/08/08 09:49 256 webpack-dev-server.cmd
2017/08/08 09:49 212 webpack.cmd
12 個文件 3,322 字節
4 個目錄 146,669,424,640 可用字節

D:\Program Files\nodejs\node_global>

項目搭建
初始化項目
新建一個項目文件夾,名為vuedemo

E:\IDC\Workspace>md vuedemo

E:\IDC\Workspace>cd vuedemo

E:\IDC\Workspace\vuedemo>
1
2
3
4
5
初始化項目,生成package.json文件

E:\IDC\Workspace\vuedemo>npm init -y
Wrote to E:\IDC\Workspace\vuedemo\package.json:

{
"name": "vuedemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

E:\IDC\Workspace\vuedemo>dir
驅動器 E 中的卷沒有標簽。
卷的序列號是 000D-8BC6

E:\IDC\Workspace\vuedemo 的目錄

2017/08/10 09:59<DIR> .
2017/08/10 09:59<DIR> ..
2017/08/10 09:59 221 package.json
1 個文件221 字節
2 個目錄 91,132,411,904 可用字節

安裝依賴庫
在使用npm安裝依賴之前,我先解釋幾個參數。npm安裝分為全局安裝和和本地安裝。如:

npm install express # 本地安裝
npm install express -g # 全局安裝
1
2
說明:

本地安裝

將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
可以通過 require() 來引入本地安裝的包。
全局安裝

將安裝包放在 .\/node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
可以直接在命令行裏使用。
如果你希望具備兩者功能,則需要在兩個地方安裝它或使用 npm link。

另外,npm install在安裝npm包時,有兩種命令可以把他們的信息寫入package.json文件,一個是npm install –save另一個是 npm install –save-dev,他們表面上的區別是–save 會把依賴包名稱添加到 package.json 文件 dependencies 鍵下,–save-dev 則添加到 package.json 文件 devDependencies 鍵下,–save-dev 是你開發時候依賴的東西,–save 是你發布之後還依賴的東西。

安裝vue及相關組件
安裝vue.js,默認安裝最新的版本

nmp install --save vue
1
安裝路由組件vue-router.js

nmp install --save vue-router
1
拓展:在一個項目中通常還需要用到的組件vue-resource進行HTTP異步請求提交,還可以使用element-ui提供的各種前端組件幫助我們快速完成開發。

安裝webpack及相關組件
全局和本地安裝webpack,以及Nodejs.js解釋服務器webpack-dev-server

npm install webpack webpack-dev-server -g #全局安裝
npm install --save-dev webpack webpack-dev-server #本地安裝
1
2
安裝其他有用的組件
安裝babel,其作用是將ES6的語法編譯成瀏覽器認識的語法ES5

npm install --save-dev babel-core babel-loader babel-preset-es2015
1
安裝vue解析組件,解析.vue後綴文件

npm install --save-dev vue-loader vue-template-compiler
1
安裝css解析組件

npm install --save-dev css-loader style-loader
1
拓展:css-loader 和 style-loader,二者處理的任務不同,css-loader使你能夠使用類似@import 和 url(…)的方法實現 require()的功能,style-loader將所有的計算後的樣式加入頁面中,二者組合在一起使你能夠把樣式表嵌入webpack打包後的JS文件中。

安裝url-loader,file-loader打包文件和圖片

npm install --save-dev url-loader file-loader
1
查看一下package.json文件的內容

E:\IDC\Workspace\vuedemo>type package.json
{
"name": "vuedemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"vue": "^2.4.2",
"vue-router": "^2.7.0"
},
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.24.1",
"css-loader": "^0.28.4",
"file-loader": "^0.11.2",
"style-loader": "^0.18.2",
"url-loader": "^0.5.9",
"vue-loader": "^13.0.4",
"vue-template-compiler": "^2.4.2",
"webpack": "^3.5.2",
"webpack-dev-server": "^2.7.1"
}
}


編輯項目目錄和添加代碼
查看當前目錄

E:\IDC\Workspace\vuedemo>tree
E:.
├─ dist
├─ node_modules
│ ├─ .bin
│ └─ ...
├─ src
│ ├─ assets
│ │ ├─ imgs
│ │ │ └─ logo.png
│ │ └─ styles
│ │ └─ base.css
│ ├─ components
│ │ └─ header.vue
│ ├─ views
│ │ ├─ about.vue
│ │ └─ home.vue
│ ├─ App.vue
│ ├─ main.js
│ └─ routes.js
├─ index.html
├─ package.json
└─ webpack.config.js


項目目錄
//dist文件是後面執行webpack指令生產的,不用管;

//webpack.config.js 配置文件,本身也是一個標準的Commonjs規範的模塊;

//routes.js文件放路由配置文件;

//index.html首頁入口文件

//App.vue是項目入口文件。

//main.js這是項目的核心文件。全局的配置都在這個文件裏面配置。

//components目錄裏面放了公共組件header文件。

//views文件放詳情頁面;

代碼
根目錄代碼
這裏主要是編寫webpack.config.js配置文件

/**
* Created by 01107267 on 2017/8/7.
*/
var path = require(‘path‘)
var webpack = require(‘webpack‘)

module.exports = {
entry: ‘./src/main.js‘,//也可以是數組,對象
output: {
path: path.resolve(__dirname, ‘./dist‘),//webpack 構建後的結果存在此位置
publicPath: ‘/dist/‘, //許多Webpack的插件用於在生產模式和開發模式下下更新內嵌到css、html,img文件裏的url值
filename: ‘build.js‘
},
module: {
rules: [
{
test: /\.vue$/, //一個匹配loaders所處理的文件的拓展名的正則表達式(必須)
loader: ‘vue-loader‘, //loader的名稱(必須)
options: {
loaders: {
}
//other vue-oader options go here
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?\S*)?$/,
loader: ‘file-loader‘,
query: {
name: ‘[name].[ext]?[hash]‘
}
},
{
test: /\.js$/,
loader: ‘babel-loader‘,
exclude: /node_modules/
},
// self define
{
test: /\.css$/,
loader: "style-loader!css-loader"
}
,
{
test: /\.scss$/,
loader: "style-loader!css-loader!sass-loader!"
},
{
test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
loader: ‘file-loader‘
}
]
},
resolve: {
alias: {
‘vue$‘: ‘vue/dist/vue.esm.js‘
}
},
devServer: {//webpack-dev-server配置
historyApiFallback: true,//不跳轉
noInfo: true,
inline: true//實時刷新
},
performance: {
hints: false
},
devtool: ‘#eval-source-map‘
}

if (process.env.NODE_ENV === ‘production‘) {
module.exports.devtool = ‘#source-map‘
// http://vue-loader.vuejs.org/en/workflow/production.html
module.exports.plugins = (module.exports.plugins || []).concat([
new webpack.DefinePlugin({
‘process.env‘: {
NODE_ENV: ‘"production"‘
}
}),
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
compress: {
warnings: false
}
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
])
}

註釋:
test:一個匹配loaders所處理的文件的拓展名的正則表達式(必須)
loader:loader的名稱(必須)
include/exclude:手動添加必須處理的文件(文件夾)或屏蔽不需要處理的文件(文件夾)(可選)

編寫routes.js文件

// 引用模板
import Vue from ‘vue‘;
import Router from ‘vue-router‘;
import indexPage from ‘./components/header.vue‘
import homePage from ‘./views/home.vue‘
import aboutPage from ‘./views/about.vue‘

Vue.use(Router)

export default new Router({
routes:[
{
path:‘/‘,
component:homePage
},
{
path:‘/about‘,
component:aboutPage
}
]
})


編寫index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="appIndex">

</div>
<script src="./dist/build.js"></script>
</body>
</html>

編寫App.vue文件

<!--App.vue是項目入口文件。-->
<template>
<div id="app">
<header-tab></header-tab>
<h2>{{msg}}</h2>
<div class="nav-box">
<p class="nav-list">
<router-link class="nav-item" to="/">首頁</router-link>
<router-link class="nav-item" to="/about">關於</router-link>
</p>
</div>
<div>
<router-view></router-view>
</div>
</div>
</template>

<script>
import HeaderTab from ‘./components/header.vue‘;
export default {
name: ‘app‘,
data () {
return {
msg: ‘Welcome to Your Vue.js App‘
}
},
components:{
HeaderTab
}
}
</script>

<style type="text/css">
h2{
color:#ff0000;
}
#app {
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
text-align: left;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>




編寫main.js文件

//main.js這是項目的核心文件。全局的配置都在這個文件裏面配置
import Vue from ‘vue‘
import App from ‘./App.vue‘
import router from ‘./routes.js‘

import ‘./assets/styles/base.css‘
Vue.config.debug = true;//開啟錯誤提示

new Vue({
router,
el: ‘#appIndex‘,
render: h => h(App)
})

components組件目錄代碼
編寫header.vue文件

<template>
<div>
<h1>共同header</h1>
<img src="../assets/imgs/logo.png">
</div>
</template>

views目錄代碼
編寫about.vue文件

//about.vue
<template>
<div>about</div>
</template>

編寫home.vue文件

//index.vue
<template>
<div>
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
<button @click="eClick()">事件</button>
</div>
</template>

<script>
export default {
name: ‘indexP‘,
data () {
return {
todos: [
{ text: ‘Learn JavaScript‘ },
{ text: ‘Learn Vue‘ },
{ text: ‘Build something awesome‘ }
]
}
},
methods:{
eClick(){
console.log(9999);
}
}
}
</script>


style目錄代碼
編寫base.css文件

h1{
color: #999;
}

項目啟動
構建打包

webpack
1


執行webpack-dev-server

webpack-dev-server
1


技術分享圖片

vue.js+webpack在一個簡單實例中的使用過程demo