webpack的學(xué)習(xí)

今天研究了下webpack拴竹,

Paste_Image.png

現(xiàn)將相關(guān)知識(shí)整理如下:

一、安裝及使用

1星持、使用Node.js cd到指定文件夾中钻趋,再采用npm init 初始化得到package.json等文件;
2毁靶、安裝webpack (安裝 webpack 依賴)

npm install webpack --save-dev

3胧奔、首先創(chuàng)建一個(gè)靜態(tài)頁面 index.html 和一個(gè) JS 入口文件 entry.js

我的index.html 文件:

<!-- index.html -->
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <script src="bundle.js"></script>
</body>
</html>

我的 entry.js文件:

// entry.js
document.write('It works.')
4、使用webpack entry.js bundle.js命令预吆,來編譯 entry.js 并打包到 bundle.js葡盗;

此時(shí)我們用瀏覽器打開 index.html 將會(huì)看到 It works.字樣。

5啡浊、接下來添加一個(gè)模塊 module.js 并修改入口 entry.js
// module.js
module.exports = 'It works from module.js.'
// entry.js
document.write('It works.')
document.write(require('./module.js')) // 添加模塊
6觅够、使用webpack entry.js bundle.js重新打包

此后我們刷新頁面,會(huì)看到頁面變成了 It works.It works from module.js.字樣巷嚣。

二喘先、Loader

由于webpack本身只能處理javascript模塊,如果需要處理其他類型的文件比如css等廷粒,則需要使用到loader窘拯;loader其實(shí)就是一個(gè)模塊與文件間的轉(zhuǎn)換器;它本身是一個(gè)函數(shù)坝茎,接受源文件作為參數(shù)涤姊,返回轉(zhuǎn)換的結(jié)果。這樣我們就可以通過require處理來加載任何類型的模塊或文件比如CoffeeScript嗤放、LESS思喊、JSX或圖片。

Loader 本身也是運(yùn)行在 node.js 環(huán)境中的 JavaScript 模塊次酌,它通常會(huì)返回一個(gè)函數(shù)恨课。大多數(shù)情況下,我們通過 npm 來管理 loader岳服,但是你也可以在項(xiàng)目中自己寫 loader 模塊剂公。

7、使用npm install css-loader style-loader安裝 loader

我們要在頁面中引入一個(gè) CSS 文件 style.css吊宋,首頁將 style.css 也看成是一個(gè)模塊纲辽,然后用 css-loader 來讀取它,再用 style-loader 把它插入到頁面中。

8拖吼、新建 style.css文件并修改之前的 entry.js文件:
/* style.css 文件*/
body { background: yellow; }
/* entry.js 文件*/
require("!style!css!./style.css") // 載入 style.css
document.write('It works.')
document.write(require('./module.js'))
9鳞上、再使用webpack entry.js bundle.js重新編譯打包,刷新頁面绿贞,就可以看到黃色的頁面背景了因块。

如果每次 require CSS 文件的時(shí)候都要寫 loader 前綴橘原,是一件很繁瑣的事情籍铁。我們可以根據(jù)模塊類型(擴(kuò)展名)來自動(dòng)綁定需要的 loader。將 entry.js 中的 require("!style!css!./style.css") 修改為 require("./style.css") 趾断,然后執(zhí)行:

$ webpack entry.js bundle.js --module-bind 'css=style!css'

# 有些環(huán)境下可能需要使用雙引號(hào)
$ webpack entry.js bundle.js --module-bind "css=style!css"

這樣就不需要在entry.js中寫那么多 loader 前綴了拒名。

三、配置文件

我們在執(zhí)行webpack命令除了使用命令行的方式傳入?yún)?shù)芋酌,還可使用指定的配置文件來執(zhí)行的方式增显。

默認(rèn)情況下,會(huì)搜索當(dāng)前目錄的 webpack.config.js 文件脐帝,這個(gè)文件是一個(gè) node.js 模塊同云,返回一個(gè) json 格式的配置信息對象,或者通過 --config 選項(xiàng)來指定配置文件堵腹。

10炸站、確認(rèn)根目錄的package.json
{
  "name": "webpack-example",
  "version": "1.0.0",
  "description": "A simple webpack example.",
  "main": "bundle.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "webpack"
  ],
  "author": "zhaoda",
  "license": "MIT",
  "devDependencies": {
    "css-loader": "^0.21.0",
    "style-loader": "^0.13.0",
    "webpack": "^1.12.2"
  }
}
11、創(chuàng)建一個(gè)配置文件 webpack.config.js
var webpack = require('webpack')

module.exports = {
  entry: './entry.js',
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {test: /\.css$/, loader: 'style!css'}
    ]
  }
}
12疚顷、同時(shí)簡化 entry.js 中的 style.css 加載方式:require('./style.css')
13旱易、最后運(yùn)行webpack

四、插件

插件可以完成更多 loader 不能完成的功能腿堤。
插件的使用一般是在 webpack 的配置信息 plugins 選項(xiàng)中指定阀坏。
Webpack 本身內(nèi)置了一些常用的插件,還可以通過 npm 安裝第三方插件笆檀。

接下來忌堂,我們利用一個(gè)最簡單的 BannerPlugin 內(nèi)置插件來實(shí)踐插件的配置和運(yùn)行,這個(gè)插件的作用是給輸出的文件頭部添加注釋信息酗洒。

14浸船、修改 webpack.config.js,添加 plugins:
var webpack = require('webpack')

module.exports = {
  entry: './entry.js',
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {test: /\.css$/, loader: 'style!css'}
    ]
  },
  plugins: [
    new webpack.BannerPlugin('This file is created by zhaoda')
  ]
}
15寝蹈、然后運(yùn)行 webpack李命,打開 bundle.js,可以看到文件頭部出現(xiàn)了我們指定的注釋信息箫老;
/*! This file is created by zhaoda */
/******/ (function(modules) { // webpackBootstrap
/******/  // The module cache
/******/  var installedModules = {};
// 后面代碼省略

五封字、開發(fā)環(huán)境

當(dāng)項(xiàng)目逐漸變大,webpack 的編譯時(shí)間會(huì)變長,可以通過參數(shù)讓編譯的輸出內(nèi)容帶有進(jìn)度和顏色阔籽。
$ webpack --progress --colors
如果不想每次修改模塊后都重新編譯流妻,那么可以啟動(dòng)監(jiān)聽模式。開啟監(jiān)聽模式后笆制,沒有變化的模塊會(huì)在編譯后緩存到內(nèi)存中绅这,而不會(huì)每次都被重新編譯,所以監(jiān)聽模式的整體速度是很快的在辆。
$ webpack --progress --colors --watch
當(dāng)然证薇,使用 webpack-dev-server 開發(fā)服務(wù)是一個(gè)更好的選擇。它將在 localhost:8080 啟動(dòng)一個(gè) express 靜態(tài)資源 web 服務(wù)器匆篓,并且會(huì)以監(jiān)聽模式自動(dòng)運(yùn)行 webpack浑度,在瀏覽器打開 http://localhost:8080/http://localhost:8080/webpack-dev-server/ 可以瀏覽項(xiàng)目中的頁面和編譯后的資源輸出,并且通過一個(gè) socket.io 服務(wù)實(shí)時(shí)監(jiān)聽它們的變化并自動(dòng)刷新頁面鸦概。

# 安裝
$ npm install webpack-dev-server -g
# 運(yùn)行
$ webpack-dev-server --progress --colors

以上根據(jù) Webpack 中文指南 做了適當(dāng)修改箩张。
webpack官網(wǎng):https://webpack.github.io/

** webpack其他資料推薦:**
1、入門Webpack窗市,看這篇就夠了
https://gitbook.cn/books/599270d5625e0436309466c7/index.html

2先慷、一小時(shí)包教會(huì) —— webpack 入門指南

3、中文文檔 https://webpack.docschina.org/guides/

**本文版權(quán)歸本人即簡書筆名:該賬戶已被查封 所有咨察,如需轉(zhuǎn)載請注明出處论熙。謝謝! *

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扎拣,一起剝皮案震驚了整個(gè)濱河市赴肚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌二蓝,老刑警劉巖誉券,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刊愚,居然都是意外死亡踊跟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸥诽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商玫,“玉大人,你說我怎么就攤上這事牡借∪” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵钠龙,是天一觀的道長炬藤。 經(jīng)常有香客問我御铃,道長,這世上最難降的妖魔是什么沈矿? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任上真,我火速辦了婚禮,結(jié)果婚禮上羹膳,老公的妹妹穿的比我還像新娘睡互。我一直安慰自己,他們只是感情好陵像,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布就珠。 她就那樣靜靜地躺著,像睡著了一般蠢壹。 火紅的嫁衣襯著肌膚如雪嗓违。 梳的紋絲不亂的頭發(fā)上九巡,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天图贸,我揣著相機(jī)與錄音,去河邊找鬼冕广。 笑死疏日,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撒汉。 我是一名探鬼主播沟优,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睬辐!你這毒婦竟也來了挠阁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤溯饵,失蹤者是張志新(化名)和其女友劉穎侵俗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丰刊,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隘谣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啄巧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寻歧。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秩仆,靈堂內(nèi)的尸體忽然破棺而出码泛,到底是詐尸還是另有隱情,我是刑警寧澤澄耍,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布噪珊,位于F島的核電站忘衍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卿城。R本人自食惡果不足惜枚钓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瑟押。 院中可真熱鬧搀捷,春花似錦、人聲如沸多望。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀偷。三九已至家厌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椎工,已是汗流浹背饭于。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留维蒙,地道東北人掰吕。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像颅痊,于是被迫代替她去往敵國和親殖熟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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

  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺斑响,特此分享以備自己日后查看菱属,也希望更多的人看到...
    小小字符閱讀 8,171評論 7 35
  • GitChat技術(shù)雜談 前言 本文較長,為了節(jié)省你的閱讀時(shí)間舰罚,在文前列寫作思路如下: 什么是 webpack纽门,它要...
    蕭玄辭閱讀 12,697評論 7 110
  • 在現(xiàn)在的前端開發(fā)中,前后端分離沸停、模塊化開發(fā)膜毁、版本控制、文件合并與壓縮愤钾、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,443評論 1 32
  • 今日早盤兩市終于出現(xiàn)了一些變化能颁,沒有再象往天一樣雙雙低開杂瘸,盡管滬指依然低開,但至少創(chuàng)業(yè)板是平開的伙菊,開盤后創(chuàng)業(yè)板快速...
    股海蒼穹閱讀 234評論 0 0
  • 這趟俄羅斯之行收獲頗多败玉,但確實(shí)很很趕很累敌土,也讓我意識(shí)到了堅(jiān)持一件事情是有多難,這篇遲到的文章就當(dāng)是自我檢討吧运翼。 俄...
    sofia豆子閱讀 643評論 3 2