ReactJS_15 基于webpack手動(dòng)配置React開發(fā)環(huán)境

React提供了create-react-app的快速構(gòu)建工具, 但面對(duì)復(fù)雜的項(xiàng)目, 入門級(jí)的構(gòu)建工具, 是遠(yuǎn)遠(yuǎn)不夠的, 我們這里從零開始, 用webpack, 手動(dòng)配置一個(gè)獨(dú)立的React開發(fā)環(huán)境, 開發(fā)環(huán)境完成后, 支持自動(dòng)構(gòu)建, 自動(dòng)刷新, sass語(yǔ)法 等功能...

1.安裝webpack

在安裝webpack之前吩案,我們先建立一個(gè)文件夾并進(jìn)入肥败,當(dāng)然你可以用其他方法,我這里就用命令了翠霍。

mkdir react-webpack  //創(chuàng)建一個(gè)react-webpack文件夾
cd react-webpack  //切換到react-webpack文件夾內(nèi)

進(jìn)入文件夾后對(duì)我們的webpack項(xiàng)目進(jìn)行初始化儒老。命令如下:

npm n init

初始化成功后可以在項(xiàng)目根目錄下看到package.json文件。如果你一路按回車感覺(jué)有些麻煩,你可以直接加一個(gè)-y參數(shù)吆鹤,這樣npm就直接給我們生成了。

npm n init -y
package文件生成

package.json文件建立好以后洲守,你可以安裝webpack了

npm install --save-dev webpack   //在該項(xiàng)目里面安裝webpack
npm install -g webpack    //全局進(jìn)行安裝webpack

建議使用cnpm來(lái)進(jìn)行安裝疑务,這樣速度會(huì)快很多。安裝好后梗醇,你會(huì)在package.json里看到你安裝的版本號(hào)知允。
檢測(cè)webpack是否安裝成:

node_modules/.bin/webpack -v   //當(dāng)前項(xiàng)目安裝檢測(cè)
webpack -v  //全局安裝檢測(cè)
版本號(hào)顯示

安裝相關(guān)軟件包

npm install react react-dom webpack-cli webpack-dev-server html-webpack-plugin -D
npm install babel-core babel-loader babel-plugin-transform-runtime -D
npm install babel-preset-env babel-preset-stage-0 babel-preset-react -D
# 識(shí)別html轉(zhuǎn)換為jsx語(yǔ)法
npm install babel-preset-react -D

2.添加對(duì)html靜態(tài)文件的支持

  • 在根目錄下新建文件夾src, 在src內(nèi)加入index.html index.js
  • 在根目錄下新建文件夾dist, 在src內(nèi)加入main.js
  • 在根目錄下新建webpack.config.js文件

在webpack.config.js中加入如下配置

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 負(fù)責(zé)將html文檔虛擬到根目錄下
let htmlWebpackPlugin = new HtmlWebpackPlugin({
    // 虛擬的html文件名 index.html
    filename: 'index.html',
    // 虛擬html的模板為 src下的index.html
    template: path.resolve(__dirname, './src/index.html')
})

module.exports = {
    // 開發(fā)模式
    mode: 'development',
    // 配置入口文件
    entry: './src/index.js',
    // 配置出口文件
    output: {
        path: path.resolve(__dirname, 'dist'),   //文件所在目錄
        filename: 'main.js'    //文件名稱
    },
    // 配置開發(fā)服務(wù)器, 并配置自動(dòng)刷新
    devServer: {
        // 根目錄下dist為基本目錄
        contentBase: path.join(__dirname, 'dist'),
        // 設(shè)置是否自動(dòng)壓縮
        compress: true,
        // 服務(wù)端口為1208(可隨意設(shè)置,但不要跟其他項(xiàng)目的相同)
        port: 1208,
        // 是否自動(dòng)打開瀏覽器
        open: true
    },
    // 裝載虛擬目錄插件
    plugins: [htmlWebpackPlugin],
}

package.json內(nèi)scripts中添加"dev": "webpack-dev-server"

添加scripts配置

src/index.html中添加內(nèi)容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack_react 配置練習(xí)</title>
</head>
<body>
    webpack_react 配置練習(xí)
    <hr>
    我的react顯示頁(yè)面
</body>
</html>

在終端中輸入npm run dev 叙谨,就可以看到打包結(jié)果了温鸽。如果沒(méi)有出現(xiàn)錯(cuò)誤,瀏覽器會(huì)自動(dòng)打開手负,可以看到我們的編寫結(jié)果涤垫。到這步為止,我們正確安裝了webpack虫溜,并進(jìn)行了出入口的配置雹姊,也看到了webpack的輸出結(jié)果。


輸出結(jié)果

3. 添加對(duì)js高級(jí)語(yǔ)法的支持

接下來(lái)我們配置babel對(duì)es6語(yǔ)法的支持, 以及對(duì)jsx語(yǔ)法的支持:
在項(xiàng)目根目錄, 添加.babelrc配置文件 presets為語(yǔ)法配置,plugins為插件配置

{
    "presets": ["env", "stage-0", "react"],
    "plugins": ["transform-runtime"]
}

在webpack.config.js中添加module字段, 進(jìn)行插件loader配置

// webpack.config.js
module.exports = {
    ...
    // 配置loader
    module: {
        // 根據(jù)文件后綴匹配規(guī)則
        rules: [
            // 配置js/jsx語(yǔ)法解析
            {
               test: /\.js|jsx$/, 
              use: 'babel-loader', 
              exclude: /node_modules/ 
            }
        ]
    }
};

src/index.html中加入idrootdiv節(jié)點(diǎn)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack_react 配置練習(xí)</title>
</head>
<body>
    webpack_react 配置練習(xí)
    <hr>
    我的react顯示頁(yè)面
   <hr>
  <div id="app"></div>
</body>
</html>

src/index.js中加入包含jsx語(yǔ)法的react組件

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

ReactDOM.render(
    <div>顯示內(nèi)容</div>,
    document.getElementById("app")
);

在終端運(yùn)行npm run dev便可以查看到app里面的內(nèi)容

運(yùn)行結(jié)果

3. 添加對(duì)sass衡楞、css語(yǔ)法的支持(沒(méi)興趣可以跳過(guò))

安裝sass相關(guān)的loader

npm install style-loader css-loader node-sass sass-loader -D 

在webpack.config.js內(nèi)新增規(guī)則

// webpack.config.js
module.exports = {
    ...
    module: {
        rules: [{
            test: /\.scss|css$/,     //scss和css文件匹配
            use: [
                "style-loader", // creates style nodes from JS strings
                "css-loader", // translates CSS into CommonJS
                "sass-loader" // compiles Sass to CSS
            ]
        }]
    }
};

在src內(nèi)新增index.scss

$designWidth: 750;
@function px2rem($px) {
  @return $px*10/$designWidth + rem;
}

#app {
    div {
        font-size: px2rem(500);
        display: flex;
        color: #64B587;
        input {
            flex: 1 1 auto;
        }
        span {
            flex: 1 1 auto;
            text-align: center;
        }
    }
}

在index.js中新增import index.scss即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吱雏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘾境,更是在濱河造成了極大的恐慌歧杏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迷守,死亡現(xiàn)場(chǎng)離奇詭異犬绒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)兑凿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門凯力,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茵瘾,“玉大人,你說(shuō)我怎么就攤上這事咐鹤∞置兀” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵祈惶,是天一觀的道長(zhǎng)雕旨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捧请,這世上最難降的妖魔是什么凡涩? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疹蛉,結(jié)果婚禮上活箕,老公的妹妹穿的比我還像新娘。我一直安慰自己氧吐,他們只是感情好讹蘑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布末盔。 她就那樣靜靜地躺著筑舅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陨舱。 梳的紋絲不亂的頭發(fā)上翠拣,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音游盲,去河邊找鬼误墓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛益缎,可吹牛的內(nèi)容都是我干的谜慌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莺奔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼欣范!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起令哟,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恼琼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屏富,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晴竞,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年狠半,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了噩死。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤难。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖已维,靈堂內(nèi)的尸體忽然破棺而出乐严,到底是詐尸還是另有隱情,我是刑警寧澤衣摩,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布昂验,位于F島的核電站,受9級(jí)特大地震影響艾扮,放射性物質(zhì)發(fā)生泄漏既琴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一泡嘴、第九天 我趴在偏房一處隱蔽的房頂上張望甫恩。 院中可真熱鬧,春花似錦酌予、人聲如沸磺箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)松靡。三九已至,卻和暖如春建椰,著一層夾襖步出監(jiān)牢的瞬間雕欺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工棉姐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屠列,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓伞矩,卻偏偏與公主長(zhǎng)得像笛洛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乃坤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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