摘要:主模塊的入口模塊就是。主要就做兩件事引入個(gè)功能模塊,并掛載至同一個(gè)對(duì)象上,對(duì)外暴露。在非環(huán)境下壓縮代碼,給予警告。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注源碼解讀倉庫
主模塊
redux的入口模塊就是src/index.js。這個(gè)文件的代碼十分簡單。主要就做兩件事:
引入個(gè)功能模塊,并掛載至同一個(gè)對(duì)象上,對(duì)外暴露。
在非production環(huán)境下壓縮代碼,給予警告。
下面是模塊的源碼(只包含自己對(duì)代碼的理解,并不包含原注釋。)
// 引入createStore模塊,這個(gè)模塊就是`createStore`方法的實(shí)現(xiàn) import createStore from "./createStore" // 引入combineReducers模塊,這個(gè)模塊就是`combineReducers`方法的實(shí)現(xiàn) import combineReducers from "./combineReducers" // 引入bindActionCreators模塊,這個(gè)模塊就是`bindActionCreators`方法的實(shí)現(xiàn) import bindActionCreators from "./bindActionCreators" // 引入applyMiddleware模塊,這個(gè)模塊就是`applyMiddleware`方法的實(shí)現(xiàn) import applyMiddleware from "./applyMiddleware" // 引入compose模塊,這個(gè)模塊就是`compose`方法的實(shí)現(xiàn) import compose from "./compose" // warning在支持console對(duì)象的瀏覽器中可以看作是對(duì)console.error方法的一個(gè)便捷方法,否則就是一個(gè)Error的實(shí)例對(duì)象。 import warning from "./utils/warning" // 這個(gè)函數(shù)唯一的作用就是:判斷代碼是不是處于壓縮模式下,如果代碼處于壓縮模式下,函數(shù)的名稱會(huì)改變,即 // isCrushed.name === "isCrushed" 為false function isCrushed() {} // 如果在非production模式下壓縮我們的js代碼,會(huì)拋出warning。 // if的判斷條件其實(shí)就是告訴我們,在production的模式下,一定要設(shè)置process.env.NODE_ENV為production if ( process.env.NODE_ENV !== "production" && typeof isCrushed.name === "string" && isCrushed.name !== "isCrushed" ) { warning( "You are currently using minified code outside of NODE_ENV === "production". " + "This means that you are running a slower development build of Redux. " + "You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify " + "or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) " + "to ensure you have the correct code for your production build." ) } // 這就是我們通常使用的redux的幾個(gè)常用的方法 export { createStore, combineReducers, bindActionCreators, applyMiddleware, compose }
怎么設(shè)置環(huán)境變量NODE_ENV的值呢?對(duì)于我們使用webpack進(jìn)行開發(fā)的同學(xué)來說,我們可以通過如下方式設(shè)置。
plugins: [ new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify(process.env.NODE_ENV) } }) ]
其中,JSON.stringify(process.env.NODE_ENV)是直接獲取的我們bash終端而言的。所以,在運(yùn)行我們的項(xiàng)目之前,我們必須確保制定了這個(gè)環(huán)境變量(注:NODE_ENV并不是不可變的,你也可以指定其他的名字,但是需要和自己項(xiàng)目中的獲取保持一致)
假設(shè)我們項(xiàng)目的啟動(dòng)腳本是yarn run start
Mac or Linux
可以通過下面兩種方式設(shè)置:
export NODE_ENV=production yarn run start # 或者 NODE_ENV=production yarn run start
Windows
可以通過下面這種方式指定:
set NODE_ENV=production yarn run start
這就是對(duì)redux源碼主模塊的一個(gè)整體解讀,水平有限,歡迎拍磚。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注:redux源碼解讀倉庫
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/89455.html
摘要:總體概括是官方推薦的一個(gè)狀態(tài)管理庫。功能強(qiáng)大且代碼優(yōu)雅。在閱讀源碼的過程中可以看出,其只依賴這兩個(gè)庫的某幾個(gè)方法。從這里來看,可以看作是無依賴的一個(gè)庫。這就是對(duì)源碼的整體概括,水平有限,歡迎拍磚。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注源碼解讀倉庫 Redux總體概括 redux是react官方推薦的一個(gè)狀態(tài)管理庫。功能強(qiáng)大且代碼優(yōu)雅。從package.json文件中: dependencie...
摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實(shí)的進(jìn)行惡意行為。鏈接發(fā)布此次發(fā)布亮點(diǎn)包括類型以及對(duì)和映射對(duì)象類型中的符號(hào)和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進(jìn)了一步。微信已將對(duì)弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個(gè)很大的亮點(diǎn),就是它解決了 CSRF 攻擊。...
摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實(shí)的進(jìn)行惡意行為。鏈接發(fā)布此次發(fā)布亮點(diǎn)包括類型以及對(duì)和映射對(duì)象類型中的符號(hào)和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進(jìn)了一步。微信已將對(duì)弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個(gè)很大的亮點(diǎn),就是它解決了 CSRF 攻擊。...
摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實(shí)的進(jìn)行惡意行為。鏈接發(fā)布此次發(fā)布亮點(diǎn)包括類型以及對(duì)和映射對(duì)象類型中的符號(hào)和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進(jìn)了一步。微信已將對(duì)弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個(gè)很大的亮點(diǎn),就是它解決了 CSRF 攻擊。...
閱讀 2285·2021-11-15 11:37
閱讀 2954·2021-09-01 10:41
閱讀 787·2019-12-27 11:58
閱讀 747·2019-08-30 15:54
閱讀 715·2019-08-30 13:52
閱讀 2930·2019-08-29 12:22
閱讀 1075·2019-08-28 18:27
閱讀 1452·2019-08-26 18:42