從頭開始構(gòu)建一個自己的react項目

原文鏈接:https://www.robinwieruch.de/minimal-react-webpack-babel-setup/
本文對原文進(jìn)行了粗略的翻譯~~旨在幫助剛?cè)腴T的新手迅速了解構(gòu)建一個基于webpack打包的react項目邓尤。

Project setup 配置項目

1.首先使用下面的命令來創(chuàng)建一個項目:

mkdir minimal-react-boilerplate 
cd minimal-react-boilerplate 
npm init -y

npm init 會生成一個package.json文件析蝴,-y命令則是所有的選項都用默認(rèn)選項.

2.創(chuàng)建一個分布式(泻轰?)文件夾腌零,該文件夾用來為單頁應(yīng)用(SPA)服務(wù)许饿,使得應(yīng)用可以在瀏覽器環(huán)境或者外部服務(wù)器被訪問到愕贡。該文件夾會包括兩個文件:一個html和一個js济舆,js會由webpack配置好的js資源來自動生成抵怎,你可以手動創(chuàng)建一個html文件作為應(yīng)用的入口浓恶。

注釋:這個html和js就是你程序發(fā)布的所有內(nèi)容了玫坛。

html的內(nèi)容如下所示:

<!DOCTYPE html>
<html>
  <head>
      <title>The Minimal React Webpack Babel Setup</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="bundle.js"></script>
  </body>
</html>

說明兩點(diǎn):

  • bundle.js會被webpack生成,

  • id=“app”會作為react根節(jié)點(diǎn)來找到入口的標(biāo)識包晰。

接下來要做的就是把所有的資源文件打包成一個bundle.js湿镀,創(chuàng)建一個根組件將id=“app”作為文件的入口

Webpack Setup 配置webpack

使用webpack來打包炕吸,為了能在localhost環(huán)境訪問到,并在瀏覽器里開發(fā)勉痴,需要同時安裝webpack-dev-server赫模,才能啟動服務(wù)器。

npm install --save-dev webpack webpack-dev-server

現(xiàn)在你應(yīng)該有node_modules文件夾蒸矛,這里你可以看到你安裝的第三方依賴嘴瓤,因為使用了--save-dev,這些依賴會被寫在package.json文件中莉钙。

接下來在package.json中配置webpack-dev-server的運(yùn)行

"scripts":{

    "start":"webpack-dev-server --progress --colors --hot --config ./webpack.config.js",

     ...

},

這個運(yùn)行腳本定義了你需要使用一些基本的配置來使用webpack-dev-server,需要創(chuàng)建配置文件webpack.config.js

module.exports = {
    entry: ['./src/index.js'],
    output: { 
      path:__dirname + '/dist', 
      publicPath: '/',
      filename: 'bundle.js'
    },
   devServer: {
      contentBase: './dist'
   }
};

簡單的說這個配置文件做了三件事:

  • 1.我們使用src/index.js來做為打包的入口文件

  • 2.打包后的文件是bundle.js

  • 3.bundle.js生成在dist文件夾下廓脆,dist文件夾被用來啟動我們的app

我們的項目里還少了一個src/index.js文件,因為它是我們的entry文件么~remember
在src/index.js中輸入
The Minimal React Webpack Babel Setup
現(xiàn)在你的項目結(jié)構(gòu)是這樣的

- dist
-- index.html
- node_modules
- src
-- index.js
- package.json
- webpack.config.js

接下來就可以運(yùn)行你的webpack-dev-server了磁玉,

通過當(dāng)前目錄下(你項目所在的目錄)啟動命令行 停忿,運(yùn)行項目
npm start

image.png

就可以看到項目已經(jīng)運(yùn)行成功了,這時候在瀏覽器中鍵入你的localhost地址蚊伞,如圖中席赂,我的運(yùn)行端口是8081;(一般情況是8080时迫,當(dāng)被占用時會往后增加)
http://localhost:8081
就可以在瀏覽器的控制臺console.log()中看到你寫入的文字了~
現(xiàn)在你通過webpack來運(yùn)行了你的項目颅停,把你的入口文件src/index.js打包成了bundle.js,然后將它引入到了dist/index.html掠拳,最后你就可以在console.log中看到你想要的結(jié)果了癞揉。
雖然目前只有src/index.js被打包了,但是你肯定會在index.js中引入更多的js溺欧,這些都會被webpack自動打包到bundle.js中喊熟。贊不贊?

Hot Reloading 熱加載

react-hot-loader是非常值得推薦給你的姐刁,它會大大縮短你開發(fā)到看到效果的時間芥牌,簡單的說,熱加載的作用就是當(dāng)你修改了一部分源代碼聂使,這個變化會立刻表現(xiàn)在瀏覽器上壁拉,而無需通過你刷新整個頁面。
在根目錄安裝
npm install --save-dev react-hot-loader
提示:在命令行柏靶,按control+c可以取消npm start的運(yùn)行弃理,然后安裝完成后需要再次運(yùn)行npm start
想要熱加載生效,我們還需要在webpack.config.js這個配置文件增加一些配置宿礁。

module.exports = {
  entry: [
     'webpack-dev-server?http://localhost:8081', // 你的應(yīng)該是8080
    'webpack/hot/only-dev-server',
    './src/index.js',
  ], 
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist',
    hot: true
  }
}

同時在src/index.js文件里還需定義熱加載是可以使用的并且需要被使用案铺。
src/index.js文件的內(nèi)容:

console.log('My Minimal React Webpack Babel Setup');
module.hot.accept();

重新跑一下npm start蔬芥,webpack的配置文件修改了是需要重新啟動的梆靖。
運(yùn)行后你又可以在瀏覽器的控制臺里看到console.log()的內(nèi)容了控汉,同時還能看到一些與熱加載有關(guān)的打印,不用去看它們返吻。先來試試我們的熱加載好了沒姑子,當(dāng)你修改你的console.log()內(nèi)容后,保存测僵,看看瀏覽器是不是自己更新了街佑,恭喜~~
到這里webpack的基本配置已經(jīng)好了,但是還少了一個重要的模塊——Babel

Babel Setup 配置babel

Babel可以使你盡情的使用es6的語法捍靠,使用Babel你的代碼會被編譯成es5沐旨,這樣的話所有的瀏覽器,可能只支持部分的es6榨婆,也可以支持你的代碼磁携。Babel甚至還允許你使用比es6還先進(jìn)的語法下一代eses7
打開命令行,讓我們趕緊使用吧
npm install --save-dev babel-core babel-loader babel-preset-es2015
此外你可能還想使用一些在試驗階段的es6特性(比如對象擴(kuò)展符{...})良风,這些可以通過stages來激活谊迄。不用擔(dān)心它的穩(wěn)定性,因為已經(jīng)被Facebook用來在create-react-app中使用了烟央。
怎么使用stages?
npm install --save-dev babel-preset-stage-2
最后一步统诺,鑒于你是要用react的,你需要多一些配置來把react的jsx文件轉(zhuǎn)換成js文件疑俭,這是為了方便粮呢。
npm install --save-dev babel-preset-react
現(xiàn)在所有的node包都已經(jīng)安裝到位,你接下來還需修改一下package.json和webpack.config.js文件钞艇,這些變化包括你所有安裝的包鬼贱。
package.json中

...
"keywords": [],
"author": "",
"license": "ISC",
"babel": {
  "presets": [
    "es2015",
    "react",
    "stage-2"
  ]
},
"devDependencies": {
...

webpack.config.js中

module.exports = {
  entry: [
    'webpack-dev-server/client?http://localhost:8080',
    'webpack/hot/only-dev-server',
    './src/index.js'
  ],
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'react-hot-loader!babel-loader'
    }]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist',
    hot: true
  }
};

對module模塊中的loaders是個數(shù)組,表示不同的加載器香璃,test是要匹配的文件后綴為.jsx这难,exclude是把node_modules排除在外。具體內(nèi)容本篇文件并未詳述葡秒。

在此時運(yùn)行npm start 將會報錯姻乓,因為你的應(yīng)用還不識別react。
因為我們馬上就要進(jìn)行第一個react組件的開發(fā)了眯牧,讓我們來修復(fù)下~

React Setup 使用React

為了使用react蹋岩,你還需要安裝兩個node包,react和react-dom学少,這兩個安裝完后npm start 也不會報錯了
npm install --save react react-dom
然后在src/index.js中編寫你的鏈接react的第一個組件吧
src/index.js中

import React from 'react';
import ReactDOM from 'react-dom';

const title = 'My Minimal React Webpack Babel Setup';

ReactDOM.render(
  <div>{title}</div>,
  document.getElementById('app')
);

module.hot.accept();

到今天剪个,不得不說這篇文章已經(jīng)過時了,因為react和各種node包的版本更新速度太快版确,這個項目已經(jīng)跑不起來扣囊,如果非要跑起來乎折,可以安裝歷史版本

npm install react-hot-loader@1.3.1 --save-dev
npm install react@15.3.0 --save-dev
npm install react-dom@15.0.2 --save-dev

所以從今天開始還是要多寫博客,多總結(jié)侵歇,以后再回頭看骂澄,自己應(yīng)該有了長足的進(jìn)步吧,以前寫的文章該有多~~
到這里惕虑,打開瀏覽器應(yīng)該就可以看到頁面上輸出了內(nèi)容坟冲,而不是再在控制臺上了
至此,一個迷你型的react項目就搭建完成了溃蔫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末健提,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伟叛,更是在濱河造成了極大的恐慌矩桂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪伦,死亡現(xiàn)場離奇詭異侄榴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)网沾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門癞蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辉哥,你說我怎么就攤上這事桦山。” “怎么了醋旦?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵恒水,是天一觀的道長。 經(jīng)常有香客問我饲齐,道長钉凌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任捂人,我火速辦了婚禮御雕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滥搭。我一直安慰自己酸纲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布瑟匆。 她就那樣靜靜地躺著闽坡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疾嗅,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天外厂,我揣著相機(jī)與錄音,去河邊找鬼宪迟。 笑死,一個胖子當(dāng)著我的面吹牛交惯,可吹牛的內(nèi)容都是我干的次泽。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼席爽,長吁一口氣:“原來是場噩夢啊……” “哼意荤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起只锻,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤玖像,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后齐饮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捐寥,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年祖驱,在試婚紗的時候發(fā)現(xiàn)自己被綠了握恳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闺属。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡姥敛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逻族,到底是詐尸還是另有隱情匕坯,我是刑警寧澤束昵,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站葛峻,受9級特大地震影響锹雏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜术奖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一逼侦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腰耙,春花似錦榛丢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春掖鱼,著一層夾襖步出監(jiān)牢的瞬間然走,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工戏挡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芍瑞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓褐墅,卻偏偏與公主長得像拆檬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妥凳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

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