如何簡(jiǎn)單手動(dòng)搭建出關(guān)于react的webpack環(huán)境

*?Webpack

作用:是當(dāng)下前端工程化環(huán)境中使用最為廣泛的構(gòu)建工具料睛,它的作用是把比較新的前端技術(shù)和文件模塊疮方,編譯打包成瀏覽器能夠識(shí)別、并且能夠盡可能兼容主流瀏覽器的代碼(HTML溪厘、CSS狮鸭、ES5)合搅,它就是一個(gè)打包器。

##?1歧蕉、安裝webpack

*?webpack?是核心庫(kù)灾部,它提供了很多?API,可以用于編程

*?webpack-cli?是命令行工具惯退,它提供了一些很好用的命令行

cnpm?install?webpack?-g

cnpm?install?webpack-cli?-g

cnpm?install?webpack?-D

cnpm?install?webpack-cli?-D

*?使用配置文件

??webpack運(yùn)行或打包時(shí)梳猪,默認(rèn)使用?webpack.config.js這個(gè)文件。

*?webpack-dev-server

??它是使用express來編寫的用于創(chuàng)建本地node服務(wù)器的第三方包

??```

??webpack?serve?--config?react.config.js

??```

入口

出口

loaders

plugins

```JavaScript

const?path?=?require("path")

//

module.exports?=?{

????//設(shè)置入口參數(shù)

????entry:?{

????????app:?path.resolve(__dirname,?"./src/main.js")//這里可以使用相對(duì)路徑

????},

????//設(shè)置出口參數(shù)

????output:?{

????????filename:?"[name].[chunkhash].js",

????????path:?path.resolve(__dirname,?'dist')//這里必須使用絕對(duì)路徑

????},

????devServer:?{

????????contentBase:?path.join(__dirname,?"./public"),

????????port:?9999,

????????open:?true

????},

}

```

##?2.?安裝webpack-dev-server

它是使用express來編寫的用于創(chuàng)建本地node服務(wù)器的第三方包

npm?install?webpack-dev-server?-D

npm?install?webpack-dev-server?-g

本地和全局都安裝一遍

最新版本啟動(dòng)命令

webpack?serve?--config?react.config.js

##?3.安裝html-webpack-plugin

創(chuàng)建HTML文件,用于服務(wù)器訪問

功能?:自動(dòng)將html,js,css文件組裝在一起,放在打包完的dist文件中

npm?install?html-webpack-plugin?-D

```JavaScript

//用于把打包后的js/css等資源,自定插入到public/index.html中

????const?HtmlWebpackPlugin?=?require('html-webpack-plugin')

????plugins:?[

????????new?HtmlWebpackPlugin({

????????????template:?path.resolve(__dirname,?'public/index.html'),

????????????title:?"2009",

????????????publicPath:?""

????????})

????],

```

##?4.安裝clean-webpack-plugin

在每次執(zhí)行npm?run?build時(shí),自動(dòng)幫我們清理掉dist

npm?install?clean-webpack-plugin?-D

```JavaScript

const?{?CleanWebpackPlugin?}?=?require("clean-webpack-plugin")

??//plugins

??plugins:?[

??????new?HtmlWebpackPlugin({

??????????template:?path.resolve(__dirname,?'public/index.html'),

??????????title:?"2009",

??????????publicPath:?""

??????}),

??????new?CleanWebpackPlugin()

??],

```

如何開啟熱更新:最新版本下,在?devServer中添加:??hot:true??即可

##?5.loaders

在webpack眼中一切皆模塊蒸痹,每一種模塊都需要對(duì)應(yīng)的loaders來加載處理

?*?1.安裝?style-loader?和?css-loader

????sass是Sass的編譯器春弥,它的作用是把sass-loader加載進(jìn)來的scss文件編譯成css文件。用于在js中導(dǎo)入css文件時(shí)候,能夠解析

????npm?install??style-loader?css-loader?-D


????```JavaScript

????module:?{

????????????rules:?[

????????????????{?test:?/\.css$/,?use:?['style-loader',?'css-loader']?},


????????????]

????????},

????```

?*?2.安裝sass-loader?node-sass?webpack?

????sass是Sass的編譯器叠荠,它的作用是把sass-loader加載進(jìn)來的scss文件編譯成css文件匿沛。


????npm?install?sass-loader?node-sass?webpack?-D

????或者新版寫法

????npm?install?sass-loader?sass?webpack?-D

????```JavaScript

????module:?{

????????????rules:?[

????????????????{?test:?/\.scss$/,?use:?['style-loader',?'css-loader',?"sass-loader"]?}

????????????]

????????},

????```

????css和sass規(guī)則可以在一起簡(jiǎn)寫

????```JavaScript

????????module:?{

????????????????rules:?[

????????????????????{?test:?/\.(css|scss)$/,?use:?['style-loader',?'css-loader',?'sass-loader']?}

????????????????]

????????????},

????```

????*?3.安裝file-loader

????file-loader的作用,是專門用于加載圖片資源的榛鼎。

????npm?install?file-loader?-D

?????```JavaScript

????module:?{

????????????rules:?[

????????????????{?test:?/\.(png|svg|jpg|gif)$/,?use:?['file-loader']?},

????????????]

????????},

????```

????*?4.關(guān)于babel模塊

????babel-loader用于加載.js文件,并交給@babel/*編輯器

????????需要安裝(1).?npm?install?babel-loader?-D

????????????????(2).npm?install?@babel/core?-D?//?這是babel的核心庫(kù),用來編譯es6代碼轉(zhuǎn)換處理

????????????????(3)?npm?install?@babel/preset-env?-D??//?//?@babel/preset-env作用是把ES6編輯成流量瀏覽器能夠兼容的ES5代碼


????*?5?使用ESLint檢測(cè)代碼

????檢測(cè)代碼規(guī)范

????安裝包?npm?install?eslint-webpack-plugin?-D


????根目錄下新建.eslintrc.json文件,填寫代碼的規(guī)范,規(guī)則

????react.config.js中

????```JavaScript

????//引入eslint-webpack-plugin

??????const?ESLintPlugin?=?require('eslint-webpack-plugin')

??????plugins:?[

????????new?ESLintPlugin({

????????????exclude:?['node_modules'],

????????????fix:true?//添加這個(gè)字段之后能夠自動(dòng)修復(fù)一些簡(jiǎn)單的錯(cuò)誤.,不過不建議添加

????????????})

??????],

??????devServer:{

????????overlay:{

????????????errors:true

????????}???//報(bào)錯(cuò)幕布是否顯示

??????}

????```

????添加注釋?//eslint-disable-line

????可以使報(bào)錯(cuò)的地方跳過eslint檢測(cè)

????也可以使用?

????/*eslint-disable*/

????aler("foo這是規(guī)則不通過的代碼")

????/*eslint-enable*/

????包含住的代碼臺(tái)哦過eslint檢測(cè)

????*?6?cross-env?給環(huán)境增加環(huán)境變量

????npm?install?cross-env?-D

????用來區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境

????package.json中

?????"build":?"cross-env?NODE_ENV=production?webpack?--config?react.config.js",

????"start":?"cross-env?NODE_ENV=development?webpack?serve?--config?react.config.js"

????????react.config.js中添加

???????const?isDev?=?process.env.NODE_ENV?===?"development"

???????console.log('----------',?isDev,?process.env.NODE_ENV)

???????(如果?npm?start?輸出為----------true,?development)

???????(如果?npm??run?build?輸出??----------?false?production)

????注意區(qū)分生產(chǎn)環(huán)境和開發(fā)環(huán)境的區(qū)別

##?6.別名寫法?和?省略后綴寫法

生產(chǎn)環(huán)境的配置添加

```JavaScript

????????resolve:?{

????????????????alias:?{

????????????????????//@別名寫法

????????????????????"@":?path.resolve(__dirname,?"src")

????????????????},

????????????????//可以省略下面的后綴名

????????????????extensions:?['.js',?'.jsx',?'.ts',?'.json',?'.css',?'.vue']

????????????}

```

##?7.react初體驗(yàn)

(1).安裝?react

npm?install?react?-S

npm?instal?react-dom?-S

npm?install?@babel/preset-react?-D??//可以讓js文件中識(shí)別jsx語(yǔ)法??需要再babel.config.js中???"presets":?["@babel/preset-env",?"@babel/preset-react"]

src下面新建App.js

```JavaScript

import?React?from?"react"

const?ele?=?<h1>hello?react</h1>

//類組件,組件定義

class?App?extends?React.Component?{

????render()?{

????????return?ele

????}

}

//函數(shù)式組件,組件定義

function?App()?{

????return?ele

}

export?default?App

```

mian.js

```JavaScript

import?React?from?"react"

import?ReactDOM?from?"react-dom"

import?App?from?'./App'

ReactDOM.render(<App?/>,?document.getElementById('root'))

```

即可導(dǎo)出react?組件到頁(yè)面上顯示出來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逃呼,一起剝皮案震驚了整個(gè)濱河市鳖孤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抡笼,老刑警劉巖苏揣,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異推姻,居然都是意外死亡平匈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門藏古,熙熙樓的掌柜王于貴愁眉苦臉地迎上來增炭,“玉大人,你說我怎么就攤上這事拧晕∠蹲耍” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵厂捞,是天一觀的道長(zhǎng)输玷。 經(jīng)常有香客問我,道長(zhǎng)靡馁,這世上最難降的妖魔是什么欲鹏? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奈嘿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吞加。我一直安慰自己裙犹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布衔憨。 她就那樣靜靜地躺著叶圃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪践图。 梳的紋絲不亂的頭發(fā)上掺冠,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音码党,去河邊找鬼德崭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛揖盘,可吹牛的內(nèi)容都是我干的眉厨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼兽狭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼憾股!你這毒婦竟也來了鹿蜀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤服球,失蹤者是張志新(化名)和其女友劉穎茴恰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩熊,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡往枣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了座享。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婉商。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渣叛,靈堂內(nèi)的尸體忽然破棺而出丈秩,到底是詐尸還是另有隱情,我是刑警寧澤淳衙,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布蘑秽,位于F島的核電站,受9級(jí)特大地震影響箫攀,放射性物質(zhì)發(fā)生泄漏肠牲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一靴跛、第九天 我趴在偏房一處隱蔽的房頂上張望缀雳。 院中可真熱鬧,春花似錦梢睛、人聲如沸肥印。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)深碱。三九已至,卻和暖如春藏畅,著一層夾襖步出監(jiān)牢的瞬間敷硅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工愉阎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绞蹦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓榜旦,卻偏偏與公主長(zhǎng)得像坦辟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子章办,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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