成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

redux源碼閱讀--主模塊

testHs / 1824人閱讀

摘要:主模塊的入口模塊就是。主要就做兩件事引入個功能模塊,并掛載至同一個對象上,對外暴露。在非環(huán)境下壓縮代碼,給予警告。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注源碼解讀倉庫

主模塊

redux的入口模塊就是src/index.js。這個文件的代碼十分簡單。主要就做兩件事:

引入個功能模塊,并掛載至同一個對象上,對外暴露。

在非production環(huán)境下壓縮代碼,給予警告。

下面是模塊的源碼(只包含自己對代碼的理解,并不包含原注釋。)

// 引入createStore模塊,這個模塊就是`createStore`方法的實現(xiàn)
import createStore from "./createStore"
// 引入combineReducers模塊,這個模塊就是`combineReducers`方法的實現(xiàn)
import combineReducers from "./combineReducers"
// 引入bindActionCreators模塊,這個模塊就是`bindActionCreators`方法的實現(xiàn)
import bindActionCreators from "./bindActionCreators"
// 引入applyMiddleware模塊,這個模塊就是`applyMiddleware`方法的實現(xiàn)
import applyMiddleware from "./applyMiddleware"
// 引入compose模塊,這個模塊就是`compose`方法的實現(xiàn)
import compose from "./compose"
// warning在支持console對象的瀏覽器中可以看作是對console.error方法的一個便捷方法,否則就是一個Error的實例對象。
import warning from "./utils/warning"

// 這個函數(shù)唯一的作用就是:判斷代碼是不是處于壓縮模式下,如果代碼處于壓縮模式下,函數(shù)的名稱會改變,即
// isCrushed.name === "isCrushed" 為false
function isCrushed() {}

// 如果在非production模式下壓縮我們的js代碼,會拋出warning。
// if的判斷條件其實就是告訴我們,在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的幾個常用的方法
export {
  createStore,
  combineReducers,
  bindActionCreators,
  applyMiddleware,
  compose
}

怎么設(shè)置環(huán)境變量NODE_ENV的值呢?對于我們使用webpack進行開發(fā)的同學(xué)來說,我們可以通過如下方式設(shè)置。

plugins: [
  new webpack.DefinePlugin({
    "process.env": {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV)
    }
  })
]

其中,JSON.stringify(process.env.NODE_ENV)是直接獲取的我們bash終端而言的。所以,在運行我們的項目之前,我們必須確保制定了這個環(huán)境變量(注:NODE_ENV并不是不可變的,你也可以指定其他的名字,但是需要和自己項目中的獲取保持一致)

假設(shè)我們項目的啟動腳本是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

這就是對redux源碼主模塊的一個整體解讀,水平有限,歡迎拍磚。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注:redux源碼解讀倉庫

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89455.html

相關(guān)文章

  • redux源碼閱讀--基本概括

    摘要:總體概括是官方推薦的一個狀態(tài)管理庫。功能強大且代碼優(yōu)雅。在閱讀源碼的過程中可以看出,其只依賴這兩個庫的某幾個方法。從這里來看,可以看作是無依賴的一個庫。這就是對源碼的整體概括,水平有限,歡迎拍磚。后續(xù)的源碼解讀和測試?yán)涌梢躁P(guān)注源碼解讀倉庫 Redux總體概括 redux是react官方推薦的一個狀態(tài)管理庫。功能強大且代碼優(yōu)雅。從package.json文件中: dependencie...

    lauren_liuling 評論0 收藏0
  • FCC 成都社區(qū)·技術(shù)周刊 第 13 期

    摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實的進行惡意行為。鏈接發(fā)布此次發(fā)布亮點包括類型以及對和映射對象類型中的符號和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進了一步。微信已將對弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個很大的亮點,就是它解決了 CSRF 攻擊。...

    Seay 評論0 收藏0
  • FCC 成都社區(qū)·技術(shù)周刊 第 13 期

    摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實的進行惡意行為。鏈接發(fā)布此次發(fā)布亮點包括類型以及對和映射對象類型中的符號和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進了一步。微信已將對弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個很大的亮點,就是它解決了 CSRF 攻擊。...

    chnmagnus 評論0 收藏0
  • FCC 成都社區(qū)·技術(shù)周刊 第 13 期

    摘要:前端支持同域才能發(fā)送本月初,瀏覽器發(fā)布。所謂攻擊,就是使用真實的進行惡意行為。鏈接發(fā)布此次發(fā)布亮點包括類型以及對和映射對象類型中的符號和數(shù)字文字的支持。但直到看到了,總算覺得社區(qū)又進了一步。微信已將對弈源碼和訓(xùn)練好的模型開源。 【前端】 1、Firefox 60 支持同域才能發(fā)送 Cookie 本月初,F(xiàn)irefox 60 瀏覽器發(fā)布。它有一個很大的亮點,就是它解決了 CSRF 攻擊。...

    wuyangchun 評論0 收藏0

發(fā)表評論

0條評論

testHs

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<