webpack教程

本文將介紹從零開始搭建vue的打包環(huán)境撕阎,重點(diǎn)介紹webpack蠢沿,vue的知識點(diǎn)請恕本文無恥的省略了
OK,開始酪术!

什么是webpack

webpack是一款模塊加載器兼打包工具骤星,它能把各種資源经瓷,例如JS(含JSX)、coffee洞难、樣式(含less/sass)舆吮、圖片等都作為模塊來使用和處理。

點(diǎn)擊這里 前往官網(wǎng)

點(diǎn)擊這里 前往官方中文站

本文基于webpack 1.14.x的版本

安裝

由于webpack是一個(gè)基于node的項(xiàng)目队贱,所以首先需要確保你的電腦里面已經(jīng)安裝了node.js色冀,以及npm。

全局安裝:

npm install webpack@1.14 -g

安裝成功之后柱嫌,在命令行輸入webpack -h即可查看當(dāng)前安裝的版本信息锋恬,以及可以使用的指令

[root@localhost ~]# webpack -v
1.14.0

當(dāng)然,我們都應(yīng)該將webpack安裝到當(dāng)前項(xiàng)目的依賴中编丘,此時(shí)就可以使用項(xiàng)目的本地版本webpack

# 確保已經(jīng)進(jìn)入項(xiàng)目目錄
# 初始化一個(gè)package.json文件
npm init
# 一路回車即可
# 安裝webpack依賴与学,這里我們安裝1.14.x的版本
npm install webpack@1.14 --save-dev
# 簡寫
npm install webpack@1.14 -S
# –save:模塊名將被添加到dependencies,可以簡化為參數(shù)-S嘉抓。
# –save-dev: 模塊名將被添加到devDependencies索守,可以簡化為參數(shù)-D。

安裝好之后我們的package.json應(yīng)該是這樣的:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "webpack": "^1.14.0"
  }
}

初始化vue的項(xiàng)目目錄結(jié)構(gòu)

webpack  項(xiàng)目目錄
  |--dist   編譯打包生成的文件存放的目錄
  |--node_modules   npm包存放的目錄掌眠,自動生成
  |--src   vue應(yīng)用的源碼存放目錄
  |--|---pages   vue其它組件的存放目錄
  |--|---main.js   vue應(yīng)用的入口js
  |--|---App.vue   vue應(yīng)用的根組件
  |--index.html vue應(yīng)用的骨架html
  |--package.json   npm配置文件
  |--webpack.config.js   webpack配置文件

源碼

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>webpack vue</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="./dist/build.js"></script>
  </body>
</html>

src/main.js

import Vue from 'vue'
import App from './App.vue'

new Vue({
  el: '#app',
  render: h => h(App)
})

src/App.vue

<template>
  <div>
    <h1>{{ msg }}</h1>
  </div>
</template>

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

利用npm安裝vue

npm install vue vue-router vuex -S

安裝好之后我們的package.json應(yīng)該是這樣的:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "vue": "^2.2.1",
    "vue-router": "^2.3.0",
    "vuex": "^2.2.1",
    "webpack": "^1.14.0"
  }
}

webpack的配置

命令行輸入webpack直接回車蕾盯,webpack會自動搜索當(dāng)前目錄下的webpack.config.js文件幕屹,按照配置文件運(yùn)行

下面是一個(gè)簡單的webpack配置文件蓝丙,只處理js

var path = require('path'),
webpack = require('webpack')

module.exports = {
  entry: './src/main',
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'js/[name].js',
    publicPath: '/dist/'
  }
};

簡單介紹下配置文件

entry

webpack入口設(shè)置

module.exports = {
  entry: './src/main'
}

這里定義入口文件,可以單個(gè)望拖,可以多個(gè):

module.exports = {
  entry: {
    app: './app',
    index: './index'
  }
}

這里的入口文件路徑都是相對于webpack.config.js文件的路徑,文件后綴.js可以省略

output

打包編譯輸出設(shè)置

module.exports = {
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'js/[name].js',
    publicPath: '/dist/'
  }
}

output.path

打包編譯生成的文件存儲路徑,這里是絕對路徑

output.filename

打包編譯生成的文件名旨别,這里[name]會根據(jù)入口定義自動生成文件名

例如:

  • 單入口

入口定義

module.exports = {
  entry: './src/main'
}

生成文件 main.js

  • 多入口

入口定義

module.exports = {
  entry: {
    app: './app',
    index: './index'
  }
}

生成文件 app.jsindex.js

output.publicPath

其它文件生成的路徑搪锣,例如:css、圖片等

loader介紹

Loader可以理解為是模塊和資源的轉(zhuǎn)換器,它本身是一個(gè)函數(shù)医咨,接受源文件作為參數(shù)枫匾,返回轉(zhuǎn)換的結(jié)果。這樣拟淮,我們就可以通過require來加載任何類型的模塊或文件干茉,比如VUE、JSX很泊、SASS 或圖片角虫。

上配置:

module.exports = {
  module: {
    loaders: [
      {
        test: /\.vue$/, // 這里是正則表達(dá)式
        loader: 'vue'  // 這里是對應(yīng)的loader
      },
      {
        test: /\.css/,
        loader:  'style-loader!css-loader'
      }
    ]
  }
}

loader怎么來呢,很簡單委造,通過npm直接安裝

npm install vue-loader css-loader vue-template-compiler -S

安裝好之后我們的package.json應(yīng)該是這樣的:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "css-loader": "^0.26.2",
    "vue": "^2.2.1",
    "vue-loader": "^11.1.3",
    "vue-router": "^2.3.0",
    "vue-template-compiler": "^2.2.1",
    "vuex": "^2.2.1",
    "webpack": "^1.14.0"
  }
}

于是戳鹅,我們的webpack配置文件就長這樣了

var path = require('path'),
webpack = require('webpack')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'build.js'
  },
  module: {
    loaders: [
      {
        test: /\.vue$/,
        loader: 'vue'
      },
      {
        test: /\.css/,
        loader: 'style!css'
      }
    ]
  }
}

注意 這里output.filename設(shè)置的是build.js,對應(yīng)上面index.html模版中引入的js文件是build.js

添加ES6的支持

如果現(xiàn)在你的項(xiàng)目還沒有對ES6的語法支持昏兆,那就有點(diǎn)沒有逼格了枫虏,其實(shí)大家都知道這個(gè)也很簡單,因?yàn)槲覀冇袀ゴ蟮?a target="_blank" rel="nofollow">Babel

首先安裝loader

npm install babel-core babel-loader babel-preset-es2015 -S

babel-loader

然后修改配置文件

  {
    test: /\.js$/,
    loader: 'babel?cacheDirectory',
    exclude: /node_modules/
  }

項(xiàng)目根目錄下新增babel配置文件.babelrc

{
  "presets": ["es2015"],
  "comments": false
}

One more thing.

babel 給每個(gè)需要的文件注入helper擴(kuò)展

原文:

babel is injecting helpers into each file and bloating my code!
babel uses very small helpers for common functions such as _extend. By default this will be added to every file that requires it.

下面的配置通過babel-plugin-transform-runtime插件可以禁用babel向每個(gè)文件注入helper

首先是安裝babel-plugin-transform-runtime爬虱,npm install babel-plugin-transform-runtime -S

babel配置文件.babelrc調(diào)整為:

{
  "presets": ["es2015"],
  "plugins": ["transform-runtime"],
  "comments": false
}

OK模软,打開命令行輸入webpack --color --progress就可以見證webpack 的打包了

至此,vue應(yīng)用就可以正常運(yùn)行了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饮潦,一起剝皮案震驚了整個(gè)濱河市燃异,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌继蜡,老刑警劉巖回俐,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稀并,居然都是意外死亡仅颇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門碘举,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忘瓦,“玉大人,你說我怎么就攤上這事引颈「ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵蝙场,是天一觀的道長凌停。 經(jīng)常有香客問我,道長售滤,這世上最難降的妖魔是什么罚拟? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任台诗,我火速辦了婚禮,結(jié)果婚禮上赐俗,老公的妹妹穿的比我還像新娘拉队。我一直安慰自己,他們只是感情好阻逮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布氏仗。 她就那樣靜靜地躺著,像睡著了一般夺鲜。 火紅的嫁衣襯著肌膚如雪皆尔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天币励,我揣著相機(jī)與錄音慷蠕,去河邊找鬼。 笑死食呻,一個(gè)胖子當(dāng)著我的面吹牛流炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仅胞,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼每辟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干旧?” 一聲冷哼從身側(cè)響起渠欺,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椎眯,沒想到半個(gè)月后挠将,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡编整,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年舔稀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掌测。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡内贮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汞斧,到底是詐尸還是另有隱情夜郁,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布断箫,位于F島的核電站拂酣,受9級特大地震影響秋冰,放射性物質(zhì)發(fā)生泄漏仲义。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埃撵。 院中可真熱鬧赵颅,春花似錦、人聲如沸暂刘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谣拣。三九已至募寨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間森缠,已是汗流浹背拔鹰。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贵涵,地道東北人列肢。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像宾茂,于是被迫代替她去往敵國和親瓷马。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

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