關(guān)于最新create-react-app使用react-app-rewired2.x添加webpack配置

使用過create-react-app(以下簡稱cra)的朋友都知道,這是react官方的一款腳手架工具,內(nèi)部集成了babel阅茶,webpack,webpack-dev-server等等谅海。

以前我們要在cra中做webpack的配置脸哀,有三種方式:

1、運(yùn)行npm?run?eject得到原始的webpack配置文件config扭吁,然后可以看到里面有prod和dev兩個(gè)環(huán)境的相關(guān)配置撞蜂;但是新版本cra你run?eject之后盲镶,只有一個(gè)webpack.config.js文件了。

可以在這里面進(jìn)行配置蝌诡。但是本文中這不是我們推薦的方式溉贿。

2、不run?eject浦旱。而是改寫script文件中的js顽照。這個(gè)本人沒有操作過,這個(gè)就不詳談了闽寡。

3代兵、使用react-app-rewired,安裝這個(gè)工具后爷狈,在項(xiàng)目根目錄中新建文件config-overrides.js文件植影。此時(shí)我們便可以在其中進(jìn)行各種webpack的騷操作了~

但是!react-app-rewired2.x以后涎永,不再支持injectBabelPlugin的方式思币,需要安裝customize-cra。

具體的羡微,ant?design官方文檔已經(jīng)給出了最新的解決方案谷饿。請前往詳覽。https://ant.design/docs/react/use-with-create-react-app-cn

這種方式就是我們推薦的方式妈倔。因?yàn)闊o需生成更多額外的文件博投,同時(shí)配置又趨于更簡單可控的方式。

接下來我們就來具體說一下操作步驟盯蝴。

首先毅哗,我們安裝react-app-rewired。

$?yarn?add?react-app-rewired

然后修改package.json文件如下捧挺,

復(fù)制代碼

```

/*?package.json?*/

"scripts":?{

-???"start":?"react-scripts?start",

+???"start":?"react-app-rewired?start",

-???"build":?"react-scripts?build",

+???"build":?"react-app-rewired?build",

-???"test":?"react-scripts?test",

+???"test":?"react-app-rewired?test",

}

```

復(fù)制代碼

接著虑绵,安裝customize-cra

```$?yarn?add?customize-cra```

然后在根目錄下添加config-overrides.js文件。

```module.exports?=?function?override(config,?env)?{

??//?關(guān)于webpack的相關(guān)配置

??return?config;

};```

好了闽烙,基本的操作就是這樣翅睛。下面我們再來說具體到我們的項(xiàng)目中,需要做的一些配置黑竞。

1捕发、react項(xiàng)目中我們最常用的組件庫antd,我們需要配置按需加載摊溶。

使用babel-plugin-import爬骤,它是一個(gè)用于按需加載組件代碼和樣式的?babel?插件。

安裝

```$?yarn?add?babel-plugin-import```

接著配置webpack?

復(fù)制代碼

```/*?config-overrides.js?*/

+?const?{?override,?fixBabelImports?}?=?require('customize-cra');

-?module.exports?=?function?override(config,?env)?{

-???return?config;

-?};

+?module.exports?=?override(

+???fixBabelImports('import',?{

+?????libraryName:?'antd',

+?????libraryDirectory:?'es',

+?????style:?'css',

+???}),

+?);```

復(fù)制代碼

這樣我們在組件中就可以按需引入組件庫中所需要的組件了莫换。

2霞玄、自定義主題

按照配置主題的要求骤铃,自定義主題需要用到?less?變量覆蓋功能。

安裝less和less-loader

```$?yarn?add?less?less-loader```

配置webpack

復(fù)制代碼

```/*?config-overrides.js?*/

-?const?{?override,?fixBabelImports?}?=?require('customize-cra');

+?const?{?override,?fixBabelImports,?addLessLoader?}?=?require('customize-cra');

module.exports?=?override(

??fixBabelImports('import',?{

????libraryName:?'antd',

????libraryDirectory:?'es',

-???style:?'css',

+???style:?true,

??}),

+?addLessLoader({

+???javascriptEnabled:?true,

+???modifyVars:?{?'@primary-color':?'#1DA57A'?},

+?}),

);```

復(fù)制代碼

這里利用了less-loader的modifyVars來進(jìn)行主題配置坷剧。當(dāng)然這里的modifyVars的值也可以是一個(gè)theme文件惰爬。

3、打包后我們會發(fā)現(xiàn)靜態(tài)文件夾中會有很多的css和js的map文件惫企,那么我們該怎么關(guān)閉sourcemap呢撕瞧?

復(fù)制代碼

```/*?config-overrides.js?*/

const?{?override,?fixBabelImports,?addLessLoader?}?=?require("customize-cra");

+?process.env.GENERATE_SOURCEMAP?=?"false";

module.exports?=?override(

??fixBabelImports("import",?{

????libraryName:?'antd',

????libraryDirectory:?"es",

????style:?true,

??}),

??addLessLoader({

????javascriptEnabled:?true,

????modifyVars:?{?'@primary-color':?'#1DA57A'?},

??})

);```

復(fù)制代碼

ok,再次執(zhí)行```npm?run?build```便不會產(chǎn)生map文件了狞尔。

還看到一種解決的方式如下丛版,

復(fù)制代碼

```const?rewiredMap?=?()?=>?config?=>?{

????config.devtool?=?config.mode?===?'development'???'cheap-module-source-map'?:?false;

????return?config;

};

module.exports?=?override(

????//?關(guān)閉mapSource

????rewiredMap()

);```

復(fù)制代碼

參考地址:https://segmentfault.com/q/1010000018123194

4、支持裝飾器

```const?{?override,?addDecoratorsLegacy?}?=?require("customize-cra");

module.exports?=?override(

????addDecoratorsLegacy()

);```

5偏序、最后我們來說說前端本地proxy的配置

開發(fā)中常見的問題就是跨域页畦。那么我們前端慣用的方式就是給本地webpack啟動(dòng)的node服務(wù)設(shè)置代理。

那么具體到使用了新版的cra后研儒,我們該怎么辦呢豫缨?

很簡單,在src目錄下新建文件setupProxy.js(注意文件名一定要是這個(gè)名字端朵,不要問什么好芭,cra現(xiàn)在廢棄了proxy對象配置的方式,將其作為單獨(dú)模塊冲呢。解析就是按?src/setupProxy.js這個(gè)路徑)

安裝http代理相關(guān)包http-proxy-middleware

```$?yarn?add?http-proxy-middleware?-D```

配置如下舍败,

復(fù)制代碼

```const?proxy?=?require('http-proxy-middleware')

module.exports?=?function(app)?{

??app.use(

????proxy('/api',?{

??????target:?'http://xx.xx.xx.xx:8000/',

??????changeOrigin:?true,

??????pathRewrite:?{

????????'^/api':?''

??????}

????})

??)

}```

復(fù)制代碼

好了,現(xiàn)在你就可以愉快的訪問接口了~

關(guān)于更多的customize-cra配置碗硬,大家可以自行查看文檔瓤湘。https://github.com/arackaf/customize-cra

轉(zhuǎn)載至:https://www.cnblogs.com/zyl-Tara/p/10635033.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恩尾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挽懦,老刑警劉巖翰意,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異信柿,居然都是意外死亡冀偶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門渔嚷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來进鸠,“玉大人,你說我怎么就攤上這事形病】湍辏” “怎么了霞幅?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長量瓜。 經(jīng)常有香客問我司恳,道長,這世上最難降的妖魔是什么绍傲? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任扔傅,我火速辦了婚禮,結(jié)果婚禮上烫饼,老公的妹妹穿的比我還像新娘猎塞。我一直安慰自己,他們只是感情好杠纵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布荠耽。 她就那樣靜靜地躺著,像睡著了一般淡诗。 火紅的嫁衣襯著肌膚如雪骇塘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天韩容,我揣著相機(jī)與錄音款违,去河邊找鬼。 笑死群凶,一個(gè)胖子當(dāng)著我的面吹牛插爹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播请梢,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼赠尾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毅弧?” 一聲冷哼從身側(cè)響起气嫁,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎够坐,沒想到半個(gè)月后寸宵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡元咙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年梯影,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶香。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甲棍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赶掖,到底是詐尸還是另有隱情感猛,我是刑警寧澤七扰,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站唱遭,受9級特大地震影響戳寸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拷泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一疫鹊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧司致,春花似錦拆吆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庭再,卻和暖如春捞奕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拄轻。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工颅围, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恨搓。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓院促,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斧抱。 傳聞我的和親對象是個(gè)殘疾皇子常拓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345