2 React環(huán)境搭建(一):webpack

React環(huán)境搭建(一):webpack

author: lordkhan
date: 2017-02-08
reference: React由0到1 by 隨風(fēng)溜達(dá)的向日葵
github: hellojianshu/react-demo

參考《React由0到1》這篇文章谐岁,開始React開發(fā)環(huán)境的搭建感凤。

$1 安裝配置node.js

$1-1 安裝node.js

node官網(wǎng)下載node.js峭竣,安裝。

$1-2 全局安裝webpack包

npm install webpack -g

如果在國內(nèi)的話情龄,建議用淘寶的鏡像,安裝包捍壤,你懂得骤视。國內(nèi)替代命令:

npm install cnpm -g
# cnpm 是使用國內(nèi)鏡像安裝包, -ddd 是顯示詳細(xì)的安裝過程
cnpm install webpack -g -ddd 

$1-3 新建node項目

新建一個文件夾,cd 進(jìn)入后鹃觉,運(yùn)行:

npm init

國內(nèi)替代命令:

cnpm init -ddd

然后一律回車专酗,走默認(rèn)選項就好。

$1-4 配置node項目

修改package.json文件盗扇,添加項目包:

{
  "name": "react-demo",
  "version": "1.0.0",
  "description": "react-demo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/hellojianshu/react-demo.git"
  },
  "author": "hello jianshu",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/hellojianshu/react-demo/issues"
  },
  "homepage": "https://github.com/hellojianshu/react-demo#readme",
  "devDependencies": {
    "webpack": "^1.13.3",
    "css-loader": "^0.25.0",
    "style-loader": "^0.13.1",
    "webpack-dev-server": "^1.16.2"
  }
}

$1-5 安裝包

運(yùn)行命令:

npm install

國內(nèi)替代命令:

cnpm install -ddd

$2 webpack——測試運(yùn)行

先寫一個index.html:

<!DOCTYPE>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script src="bundle.js"></script>
</body>
</html>

然后添加一個entry.js[1]

require("!style!css!./style.css");
document.write('<h1>hello webpack</h1>');

接著添加一個style.css:

h1{
    color:red;
}

運(yùn)行以下命令:

webpack ./entry.js bundle.js

就會發(fā)現(xiàn)在目錄中生成了一個bundle.js文件祷肯。瀏覽器中打開index.html就會看到執(zhí)行效果:

webpack執(zhí)行效果

$3 webpack——利用分析工具打包

增加一個名為module.js的文件:

module.exports = 'It works from module.js.'

在原來的entry.js增加引用:

require("!style!css!./style.css");
document.write('<h1>hello webpack</h1>');
//新增對module.js的引用
document.write(require('./module.js'));

然后同樣執(zhí)行webpack打包命令:

webpack ./entry.js bundle.js

然后在打開index.html,會發(fā)現(xiàn)我們新增加的module.js的內(nèi)容被正確輸出疗隶。這是因為我們在頁面中通過nodejs的require的方式引入的module.js佑笋,而使用webpack打包時會自動在依賴關(guān)系中引入module.js。

$4 webpack——加載器

webpack提供了一個非常強(qiáng)大的loader功能斑鼻,這個功能可以用于管理各種依賴關(guān)系模塊蒋纬,在webpack中所有的文件都視作一個模塊。

首先npm導(dǎo)入webpack loader:

npm install css-loader style-loader

添加一個用于測試的style.css文件:

h1{
    color:red;
}

在entry.js中添加引用:

require("!style!css!./style.css");//添加對css的引用
document.write('<h1>hello webpack</h1>');
document.write(require('./module.js'));

使用命令行打包:

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

會發(fā)現(xiàn)css的樣式生效了坚弱∈癖福可以將繁瑣的“!style!css!./style.css”簡寫成"./style.css"[2]

$5 使用配置管理

webpack同樣可以使用標(biāo)準(zhǔn)化配置文件來替代命令行中的各種參數(shù)荒叶。

webpack的配置文件是nodejs的文件碾阁,通常命名為 webpack.config.js。我們在工程中增加配置文件:

module.exports = {
    entry: './entry.js',//定義要引入的js文件
    output: {
        path: __dirname,
        filename: 'bundle.js' //定義要輸出的js文件
    },
    module: {
        loaders: [//定義加載內(nèi)容
            {test: /\.css$/, loader: 'style!css'}
        ]
    }
}

現(xiàn)在停撞,我們在命令行中輸入webpack就可以實現(xiàn)和前面一樣的打包[3]瓷蛙。

$5 webpack——豐富打包輸出內(nèi)容

可以使用:

webpack --progress --colors

命令來豐富打包輸出的內(nèi)容悼瓮,更容易了解出現(xiàn)的問題。效果如下:

webpack帶運(yùn)行情況與顏色高亮

$6 webpack——監(jiān)聽更新模式

在我們進(jìn)行編碼開發(fā)的時候艰猬,每次對文件的編輯我們都想立即看到編譯效果横堡,如果每次編輯都要去打包,會非常麻煩冠桃。webpack提供了一個監(jiān)聽模式(類似grunt的watch)命贴,用于監(jiān)聽每次對文件的修改,修改后會立即進(jìn)行增量更新食听。啟用監(jiān)聽模式胸蛛,以便能自動實時編譯:

webpack --progress --colors --watch

監(jiān)聽模式使用的是內(nèi)存增量更新。webpack會將所有需要打包的文件copy到內(nèi)存樱报,然后監(jiān)控文件修改葬项,如果文件發(fā)生了修改,會將修改的文件替換內(nèi)存中的對應(yīng)文件迹蛤。因此開發(fā)完之后民珍,切記進(jìn)行一次手動打包才能生效。

$7 webpack——開發(fā)環(huán)境模式

webpack更強(qiáng)大的是盗飒,他整合了nodejs的express提供了一個靜態(tài)服務(wù)器嚷量。(雖然沒有官方正式,我覺得webstrom和微信本地開發(fā)環(huán)境都是整合的nodejs的express)

使用了開發(fā)環(huán)境模式逆趣,我們所有的動態(tài)修改和操作都可以實時看到效果蝶溶,并且解決了靜態(tài)資源各種路徑引用的問題。首先npm安裝工具:

npm install webpack-dev-server -g

國內(nèi)替代命令:

cnpm install webpack-dev-server -g -ddd

然后使用命令行工具啟用開發(fā)環(huán)境:

webpack-dev-server --progress --colors

webpack的開發(fā)環(huán)境模式很強(qiáng)悍宣渗,比使用--watch更犀利的地方在于可以實現(xiàn)編輯即可見抖所。瀏覽器立即同步刷新運(yùn)行。開發(fā)環(huán)境模式可以延伸到生產(chǎn)環(huán)境實現(xiàn)代碼同步級別的熱部署落包,效果如下:

webpack開發(fā)環(huán)境模式

要注意的是部蛇,此時不是直接在瀏覽器中打開html文件,而是根據(jù)打開本地的服務(wù)器咐蝇,例如上例中涯鲁,打開

http://localhost:8080/webpack-dev-server/

如果要自定義端口,運(yùn)行:

webpack-dev-server --progress --colors --port 3000

$8 webpack拓展

$8-1 輸出調(diào)試信息

webpack --display-error-details

路徑配置最好使用絕對路徑有序,建議通過 path.resolve(__dirname, "app/folder") 或 path.join(__dirname, "app", "folder") 的方式來配置抹腿,以兼容 Windows 環(huán)境。

$8-2 webpack插件

webpack的常規(guī)功能無法滿足需求時旭寿,可以開發(fā)或使用webpack插件警绩。一個插件的標(biāo)準(zhǔn)格式:

function MyPlugin(options) {
  // Configure your plugin with options...
}

MyPlugin.prototype.apply = function(compiler) {
  compiler.plugin("compile", function(params) {
    console.log("The compiler is starting to compile...");
  });

  compiler.plugin("compilation", function(compilation) {
    console.log("The compiler is starting a new compilation...");

    compilation.plugin("optimize", function() {
      console.log("The compilation is starting to optimize files...");
    });
  });

  compiler.plugin("emit", function(compilation, callback) {
    console.log("The compilation is going to emit files...");
    callback();
  });
};

module.exports = MyPlugin;

$8-3 編輯器的文件緩存

有的編輯器有文件緩存的功能,在編輯完畢保存之后并不會實時的更新磁盤文件盅称,這樣的就導(dǎo)致webpack的開發(fā)環(huán)境無法同步更新文件肩祥。
例如webstorm后室,需要到File->settings->System Settings,將Use "safe write"的勾選去掉混狠。


  1. style! 表示 style-loader; css! 表示 css-loader ?

  2. entry.js 文件中 ?

  3. 即在命令行中直接運(yùn)行webpack岸霹,省略參數(shù) ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市将饺,隨后出現(xiàn)的幾起案子贡避,更是在濱河造成了極大的恐慌,老刑警劉巖予弧,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刮吧,死亡現(xiàn)場離奇詭異,居然都是意外死亡掖蛤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門坠七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來水醋,“玉大人旗笔,你說我怎么就攤上這事彪置。” “怎么了蝇恶?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵拳魁,是天一觀的道長。 經(jīng)常有香客問我撮弧,道長潘懊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任贿衍,我火速辦了婚禮授舟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贸辈。我一直安慰自己释树,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布擎淤。 她就那樣靜靜地躺著奢啥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘴拢。 梳的紋絲不亂的頭發(fā)上桩盲,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音席吴,去河邊找鬼赌结。 笑死捞蛋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柬姚。 我是一名探鬼主播襟交,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伤靠!你這毒婦竟也來了捣域?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宴合,失蹤者是張志新(化名)和其女友劉穎焕梅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦洽,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贞言,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阀蒂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该窗。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚤霞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昧绣,我是刑警寧澤规肴,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站夜畴,受9級特大地震影響拖刃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贪绘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一兑牡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧税灌,春花似錦均函、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狸窘,卻和暖如春墩朦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翻擒。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工氓涣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牛哺,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓劳吠,卻偏偏與公主長得像引润,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痒玩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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

  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺淳附,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,140評論 7 35
  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,166評論 40 247
  • GitChat技術(shù)雜談 前言 本文較長蠢古,為了節(jié)省你的閱讀時間奴曙,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,671評論 7 110
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,273評論 4 31
  • 我的小魚你醒了草讶, 還認(rèn)識早晨嗎洽糟? 昨夜你曾經(jīng)說, 愿夜幕永不開啟堕战。 你的香腮邊輕輕滑落的坤溃, 是你的淚,還是我的淚嘱丢?...
    小捏tv閱讀 193評論 0 1