react 項(xiàng)目構(gòu)建

前言:

構(gòu)建React項(xiàng)目的幾種方式:

  1. 構(gòu)建:create-react-app 快速腳手架
  2. 構(gòu)建:generator-react-webpack
  3. 構(gòu)建:webpack一步一步構(gòu)建

1)構(gòu)建:create-react-app 快速腳手架

FaceBook官方發(fā)布了一個(gè)無(wú)需配置的、用于快速構(gòu)建開(kāi)發(fā)環(huán)境的腳手架工具create-react-app迎卤。
creat-react-app優(yōu)點(diǎn)

  • 無(wú)需配置:官方的配置堪稱(chēng)完美,幾乎不用你再配置任何東西吩跋,就可以上手開(kāi)發(fā)項(xiàng)目。
  • 高集成性:集成了對(duì)React渔工,JSX锌钮,ES6和Flow的支持。
  • 自帶服務(wù):集成了開(kāi)發(fā)服務(wù)器涨缚,你可以實(shí)現(xiàn)開(kāi)發(fā)預(yù)覽一體化轧粟。
  • 熱更新:保存自動(dòng)更新,讓你的開(kāi)發(fā)更簡(jiǎn)單脓魏。
  • 全兼容性:自動(dòng)處理CSS的兼容問(wèn)題兰吟,無(wú)需添加-webkit前綴。
  • 自動(dòng)發(fā)布:集成好了發(fā)布成品功能茂翔,編譯后直接發(fā)布混蔼,并且包含了sourcemaps功能。
    create-react-app的安裝
    npm install -g create-react-app # Windows
    sudo npm install -g create-react-app # Linux
    創(chuàng)建React項(xiàng)目
    create-react-app my-appcd my-appnpm start

2)構(gòu)建:generator-react-webpack

npm install -g yo # 在全局安裝generator-react-webpack之前珊燎,先安裝yeoman
npm install -g generator-react-webpack
mkdir ``new``-react-democd ``new``-react-demoyo react-webpacknpm start

3)構(gòu)建:webpack一步一步構(gòu)建

安裝webpack
在安裝webpack之前惭嚣,我們先建立一個(gè)文件夾并進(jìn)入,當(dāng)然你可以用其他方法悔政,我這里就用命令了晚吞。
mkdir react-webpack
cd react-webpacknpm initnpm install --save-dev webpack
配置webpack.config.js
在項(xiàng)目根目錄建立webpack.config.js文件,這個(gè)文件是進(jìn)行webpack配置的谋国,先建立基本的入口和出口文件槽地。

var path =require(``'path'``);
module.exports = {
//入口文件
entry:``'./app/index.js'``,
//出口文件
output:{
filename:``'index.js'``,
path:path.resolve(__dirname,``'dist'``)
}
}

新建index.html文件,在根目錄新建index.html文件芦瘾,并引入webpack設(shè)置中的出口文件捌蚊,代碼如下。

<!DOCTYPE html>
<html lang=``"en"``>
<head>
<meta charset=``"UTF-8"``>
<meta name=``"viewport"` `content=``"width=device-width, initial-scale=1.0"``>
<meta http-equiv=``"X-UA-Compatible"` `content=``"ie=edge"``>
<title>React全家桶-jspang</title>
</head>
<body>
</body>
<!--引入出口文件-->
<script src=``"./dist/index.js"``></script>
</html>

測(cè)試webpack配置
通過(guò)上面的步驟近弟,配置好了wbpack缅糟,現(xiàn)在可以測(cè)試一下我們webpack配置是否有問(wèn)題。在路口文件中寫(xiě)入下面的代碼祷愉,并進(jìn)行打包測(cè)試窗宦。
/app/index.js文件

function component(){
var element = document.createElement(``'div'``);
element.innerHTML = (``'Hello JSPang'``);
return  element;
}
document.body.appendChild(component());

這段代碼非常簡(jiǎn)單,不作過(guò)多的解釋二鳄。如果你對(duì)這個(gè)代碼看不懂迫摔,再去啃兩邊犀牛或者紅寶書(shū)泥从。

加入打包命令

打開(kāi)package.json文件句占,在scripts屬性中加入build命令。

"scripts": {
"build": "webpack"
},

在終端中輸入npm run build 躯嫉,就可以看到打包結(jié)果了纱烘。如果沒(méi)有出現(xiàn)錯(cuò)誤杨拐,在瀏覽器中打開(kāi),可以看到我們的編寫(xiě)結(jié)果擂啥。到這部為止哄陶,我們正確安裝了webpack,并進(jìn)行了出入口的配置哺壶,也看到了webpack的輸出結(jié)果屋吨。

開(kāi)發(fā)服務(wù)器配置

你會(huì)很容易的發(fā)現(xiàn),我們現(xiàn)在缺少一個(gè)實(shí)時(shí)更新的服務(wù)山宾,那動(dòng)手馬上配置一個(gè)至扰。

在命令行安裝webpack-dev-server,在終端中輸入下面的命令。
cnpm install --save-dev webpack-dev-server
安裝完成后资锰,配置webpack.config.js文件敢课。

 devServer:{

contentBase`'./',

host:'localhost',

compress:true,

port:1717

}

配置好后再packeage.json里增加一個(gè)scripts命令,我們起名叫server绷杜。

"scripts": {

"build"``: "webpack",

"server": "webpack-dev-server --open"

},

這里的–open是直接打開(kāi)瀏覽器的意思直秆。這些都配置完成后,就可以在終端輸入npm run server 看到結(jié)果了鞭盟。

自動(dòng)刷新瀏覽器

在我們修改代碼時(shí)圾结,現(xiàn)在并不能自動(dòng)刷新瀏覽器,不會(huì)立即呈現(xiàn)我們編寫(xiě)的代碼結(jié)果齿诉,而時(shí)要再次npm run build才可以筝野。其實(shí)只要在出口文件配置中加一個(gè)publicPath:’temp/’,然后在index.html引入JS時(shí)寫(xiě)這個(gè)temp地址就可以實(shí)時(shí)預(yù)覽了。

output:{

filename`'index.js',

path:path.resolve(__dirname,'dist'),

publicPath:'temp/'

},

index.html文件引入JS

<script src="./temp/index.js"></script>

Babel安裝配置

在webpack中配置Babel需要先加入babel-loader鹃两,這里我們繼續(xù)使用npm來(lái)進(jìn)行安裝,但是我們一般還需要支持es2015和React舀凛,所以要安裝四個(gè)包俊扳。
cnpm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
這里安裝四個(gè)包的安裝,這個(gè)四個(gè)包不能省略猛遍。安裝后你會(huì)在package.json里看到這些包的版本馋记。

"devDependencies": {

"babel-core": "^6.26.0",

"babel-loader": "^7.1.2",

"babel-preset-es2015": "^6.24.1",

"babel-preset-react": "^6.24.1",
`"webpack":"^3.8.1",

"webpack-dev-server": "^2.9.3"

}

配置module
在安裝完成后,可以到webpack.config.js里配置module懊烤,也就是配置我們常說(shuō)的loader梯醒。

module: {
  loaders: [{
    test: /\.js$/,
    exclude: /node_modules/,
    loaders: "babel-loader",
    query: {
      presets: [
        'es2015', 'react'
      ]
    }
  }]
}

編寫(xiě)React

webpack通過(guò)上邊的步驟,基本已經(jīng)配置完成了腌紧,這里我們寫(xiě)一個(gè)React文件來(lái)進(jìn)行測(cè)試一下茸习。在進(jìn)行編寫(xiě)React文件前,要記得安裝React和React-dom這兩個(gè)包壁肋。

安裝React和React-dom

cnpm install --save react  react-dom

安裝完成后号胚,我們改寫(xiě)app/index.js文件籽慢,把原來(lái)原生的JavaScript代碼改成React代碼。
index.js

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<div>Hello JSPang</div>,

document.getElementById("app")

);

因?yàn)樯线呂覀兗恿艘粋€(gè)app的選擇器猫胁,所以在index.html中增加一個(gè)div標(biāo)簽箱亿,并把id設(shè)置成app。
index.html

<div id="app"></div>

都配置完了弃秆,我們可以用之前配置好的npm run server 命令進(jìn)行預(yù)覽了届惋。如果在瀏覽器中看到了Hello JSPang 這段文字,說(shuō)明我們的配置成功了菠赚,以后就可以愉快的進(jìn)行開(kāi)發(fā)了脑豹。

總結(jié):其實(shí)自己配置React開(kāi)發(fā)環(huán)境在實(shí)際工作中也并不多,因?yàn)槲覀兊呐渲卯吘共皇呛艹墒煨庵粒抑С州^少晨缴。這里學(xué)習(xí)只是為了你更好的掌握React構(gòu)建過(guò)程和設(shè)置參數(shù),實(shí)際工作中盡量使用合適的腳手架工具峡捡。

轉(zhuǎn)載自:jspang.com/2017/10/22/react-all-01/


webpack.config.js的完整代碼

var path = require(
  'path'
);

module.exports = {

  // 入口文件

  entry: './app/index.js',

  // 服務(wù)器配置

  devServer: {
    contentBase: './',
    host: 'localhost',
    compress: true,
    port: 1717
  },
  // 配置Babel

  module: {

    loaders: [

      {

        test: /\.js$/,

        exclude: /node_modules/,

        loaders: "babel-loader",

        query: {

          presets: [
            'es2015',
            'react'

          ]

        }

      }

    ]

  },

  // 出口文件

  output: {

    filename: 'index.js',

    path: path.resolve(__dirname,
      'dist'
    ),

    publicPath: 'temp/'

  }
}

轉(zhuǎn)載自:https://www.cnblogs.com/cina33blogs/p/9115294.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末击碗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子们拙,更是在濱河造成了極大的恐慌稍途,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚婆,死亡現(xiàn)場(chǎng)離奇詭異械拍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)装盯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)坷虑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人埂奈,你說(shuō)我怎么就攤上這事迄损。” “怎么了账磺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵芹敌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我垮抗,道長(zhǎng)氏捞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任冒版,我火速辦了婚禮液茎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己豁护,他們只是感情好哼凯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著楚里,像睡著了一般断部。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上班缎,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天蝴光,我揣著相機(jī)與錄音,去河邊找鬼达址。 笑死蔑祟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沉唠。 我是一名探鬼主播疆虚,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼满葛!你這毒婦竟也來(lái)了径簿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘀韧,失蹤者是張志新(化名)和其女友劉穎篇亭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锄贷,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡译蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谊却。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柔昼。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炎辨,靈堂內(nèi)的尸體忽然破棺而出捕透,到底是詐尸還是另有隱情,我是刑警寧澤蹦魔,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布激率,位于F島的核電站咳燕,受9級(jí)特大地震影響勿决,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜招盲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一低缩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦咆繁、人聲如沸讳推。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)银觅。三九已至,卻和暖如春坏为,著一層夾襖步出監(jiān)牢的瞬間究驴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工匀伏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洒忧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓够颠,卻偏偏與公主長(zhǎng)得像熙侍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子履磨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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