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

資訊專欄INFORMATION COLUMN

基于 NPM 的大型 React 單頁(yè)應(yīng)用探索(多場(chǎng)景多方案)

tinylcy / 592人閱讀

摘要:基于的大型單頁(yè)應(yīng)用探索多場(chǎng)景多方案原文地址未完待續(xù)本文目標(biāo)構(gòu)建基于的大型單頁(yè)應(yīng)用以及多頁(yè)面,支持多模塊協(xié)同開(kāi)發(fā)分布式構(gòu)建與發(fā)布。

基于 NPM 的大型 React 單頁(yè)應(yīng)用探索(多場(chǎng)景多方案)

原文地址:https://github.com/luqin/blog/issues/10

未完待續(xù)……

本文目標(biāo)構(gòu)建基于 NPM 的大型 React 單頁(yè)應(yīng)用(以及多頁(yè)面),支持多模塊協(xié)同開(kāi)發(fā)、分布式構(gòu)建與發(fā)布。

React

React Router

Redux...

webpack

ES2015+/JSX with babel

JavaScript 規(guī)劃

首先初始化頂層目錄結(jié)構(gòu):

app/
config/
package.json
README.md
... and tons of project .dotfiles and tool files ...
按文件類型組織 File-Type First (FTF)
app/
  reducers/
    root.js
    memberships.js
  components/
    home.jsx
    memberships.jsx
  ... of course more type folders/ ...
按功能組織 Feature First (Pods)
app/
  authentication/
    api/
    components/
    helpers/
    ...
  comments/
    actions/
    api/
    components/
    reducers/
    stores/
    ...
  ...

可以像這樣按功能分組:

app/
  settings/
    profile/
    notifications/
  ...

那么通用文件如何放置呢?一個(gè)方案是將他們放入框架文件夾:

app/
  flux/
    apiUtils.js
    baseActions.js
    baseStore.js
    connectToStores.js
多 App 模式 Multiple Apps
app/
  kapost.jsx
  studio/
    studioEntry.jsx
    content/
    ...
  gallery/
    galleryEntry.jsx
    collections/
    ...
  insights/
    insightsEntry.jsx
    content-scoring/
    ...
  members/
    membersEntry.jsx
    profile/
    ...

依然有很多通用代碼,可以放入通用文件夾:

app/
  ...
  shared/
    users/
    ui/
      dropdowns/
      ...
    ...

到目前為止,按功能組織模式仍然可以 hold 住,我們可以在每個(gè) App 使用按文件類型組織模式,但是依然有缺點(diǎn),僅僅適合單 App 模式。

面對(duì)瘋狂增長(zhǎng)的 routes 或者 reducers,還有一種優(yōu)雅的方式是使用代碼分包(code-splitting),例如動(dòng)態(tài)加載 React Router 和動(dòng)態(tài)增加 Redux reducers,那么我們?nèi)绾谓M織這些文件呢?我們可以定義一個(gè)頂級(jí)文件夾 boot/,一個(gè)項(xiàng)目文件夾例如 kapost/。

app/
  kapost/
    routes.jsx (holds and rolls up all other app routes dynamically)
    reducer.js (holds all reducers dynamically)
  studio/
    studioEntry.jsx
    app/
      routes.jsx (rolls up all application routes)
      reducers.jsx (rolls up all studio reducers across all the feature folders)
    ...
  ...

……

Application Organization API 同構(gòu) Universal Rendering

relative paths in Node

Backend Apps with Webpack (Part I)

Backend Apps with Webpack: Driving with Gulp (Part II)

Live Editing JavaScript with Webpack (Part III)

react-redux-universal-hot-example

Domains and Authentication

JSON Web Tokens

Secure cookies over HTTPS (under one primary domain name)

App Configuration Assets

webpack dev server

Styles

CSS 方案:

SASS

LESS

Inline Style

PostCSS

CSS Modules

構(gòu)建工具:

autoprefixer

webpack for stylesheets

Introduction to Using NPM as a Build Tool

本文基于 SASS 實(shí)現(xiàn)模塊化方案。

Without webpack and inlining

每個(gè)項(xiàng)目的樣式文件目錄:

studio/
  app/
  config/
  stylesheets/
  spec/
  package.json
  ...

每個(gè)樣式文件通過(guò)命名空間來(lái)實(shí)現(xiàn)模塊化,根據(jù)組件確定前綴:

studio/
  app/
    comments/
      commentEntry.jsx
  stylesheets/
    comments/
      _commentEntry.scss
// _commentEntry.scss
.studio-comment-entry-component {
  // my name-spaced styles
}


// commentEntry.jsx#render
render() {
  
...
}

共享的樣式可以放入 shared/ 目錄,全局樣式可以放入類似 stylesheets/app/ 的目錄(使用命名空間)。

每個(gè) app 都負(fù)責(zé)引入所有功能模塊的樣式文件,頂層 app 負(fù)責(zé)引入所有子 app 的樣式文件。如果分離一些 apps 到分離的代碼倉(cāng)庫(kù),可以共享相同的構(gòu)建流程,只需要維護(hù)相同的構(gòu)建配置。

With webpack and inlining
studio/
  app/
    comments/
      styles/
        individualComponentStylesheet.scss
      ...

Why You Shouldn’t Style React Components With JavaScript

Testing
studio/
  app/
    comments/
      components/
      commentsContainer.jsx
      specs/
        components/ (unit tests of sorts)
        integration/ (testing entire comment feature)
        commentsContainerSpec.jsx (container could even be the main integration test)
        ...
      ...
基于 NPM 的協(xié)同開(kāi)發(fā)方案

私有 NPM 方案:

官方私有 NPM

搭建私有 NPM 倉(cāng)庫(kù)

NPM 分包:

@kapost/app
@kapost/studio
@kapost/gallery
@kapost/insights
...
module/
  ...
  assets
  dist
  js
  scss
  test
  tools
  routes.jsx
  package.json

……

分布式編譯

gulp + webpack + babel

gulp + System.js + babel

參考:

Organizing Large React Applications

基于gulp+webpack的"約定大于配置"的構(gòu)建方案探討

基于gulp+webpack的"約定大于配置"的構(gòu)建方案探討_2

Ducks: Redux Reducer Bundles

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

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

相關(guān)文章

  • koa-cola:只需一個(gè)react組件,同時(shí)支持單頁(yè)應(yīng)用(SPA)和服務(wù)器渲染(SSR)

    摘要:是一個(gè)基于和的服務(wù)器端和瀏覽器端的的前后端全棧應(yīng)用框架。是的組件,并且會(huì)進(jìn)行數(shù)據(jù)初始化不但可以支持的數(shù)據(jù)初始化,還可以合并和的,使用同一個(gè),和的無(wú)縫結(jié)合。 koa-cola是一個(gè)基于koa和react的服務(wù)器端SSR(server side render)和瀏覽器端的SPA(single page application)的web前后端全棧應(yīng)用框架。 koa-cola使用typescr...

    XGBCCC 評(píng)論0 收藏0
  • 前端每周清單第 10 期:Firefox53、React VR發(fā)布、Microsoft Edge現(xiàn)代

    摘要:新聞熱點(diǎn)國(guó)內(nèi)國(guó)外,前端最新動(dòng)態(tài)發(fā)布近日,正式發(fā)布新版本中提供了一系列的特性與問(wèn)題修復(fù)。而近日正式發(fā)布,其能夠幫助開(kāi)發(fā)者快速構(gòu)建應(yīng)用。 前端每周清單第 10 期:Firefox53、React VR發(fā)布、JS測(cè)試技術(shù)概述、Microsoft Edge現(xiàn)代DOM樹(shù)構(gòu)建及性能之道 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請(qǐng)與InfoQ中文站聯(lián)系。從屬于筆者的 Web 前端入門...

    MingjunYang 評(píng)論0 收藏0
  • 指尖前端重構(gòu)(React)技術(shù)調(diào)研分析

    摘要:一為什么選擇是當(dāng)前前端應(yīng)用最廣泛的框架。目前來(lái)看的生態(tài)系統(tǒng)要比大的多,在等最大的技術(shù)社區(qū)搜索兩者,的搜索結(jié)果是的十倍左右,另外據(jù)近期統(tǒng)計(jì)使用的站點(diǎn)是的幾百倍以上。其中是基于技術(shù),依然是瀏覽器應(yīng)用。 一、為什么選擇React React是當(dāng)前前端應(yīng)用最廣泛的框架。三大SPA框架 Angular、React、Vue比較。 Angular出現(xiàn)最早,但其在原理上并沒(méi)有React創(chuàng)新的性能優(yōu)化...

    AlphaWallet 評(píng)論0 收藏0
  • ESLint 在中大型團(tuán)隊(duì)應(yīng)用實(shí)踐

    摘要:自動(dòng)化接入和升級(jí)方案通過(guò)命令行工具提供一鍵接入升級(jí)能力,同時(shí)集成到團(tuán)隊(duì)腳手架中,大大降低了工程接入和維護(hù)的成本。原始代碼經(jīng)過(guò)解析器的解析,在管道中逐一經(jīng)過(guò)所有規(guī)則的檢查,最終檢測(cè)出所有不符合規(guī)范的代碼,并輸出為報(bào)告。 引言 代碼規(guī)范是軟件開(kāi)發(fā)領(lǐng)域經(jīng)久不衰的話題,幾乎所有工程師在開(kāi)發(fā)過(guò)程中都會(huì)遇到,并或多或少會(huì)思考過(guò)這一問(wèn)題。隨著前端應(yīng)用的大型化和復(fù)雜化,越來(lái)越多的前端工程師和團(tuán)隊(duì)開(kāi)始重...

    alogy 評(píng)論0 收藏0
  • “別更新了,學(xué)不動(dòng)了” 之:全棧開(kāi)發(fā)者 2019 應(yīng)該學(xué)些什么?

    摘要:但是,有一件事是肯定的年對(duì)全棧開(kāi)發(fā)者的需求量很大。有一些方法可以解決這個(gè)問(wèn)題,例如模式,或者你可以這么想,其實(shí)谷歌機(jī)器人在抓取單頁(yè)應(yīng)用程序時(shí)沒(méi)有那么糟糕。谷歌正在這方面努力推進(jìn),但不要指望在年會(huì)看到任何突破。 對(duì)于什么是全棧開(kāi)發(fā)者并沒(méi)有一個(gè)明確的定義。但是,有一件事是肯定的:2019 年對(duì)全棧開(kāi)發(fā)者的需求量很大。在本文中,我將向你概述一些趨勢(shì),你可以嘗試根據(jù)這些趨勢(shì)來(lái)確定你可能要投入的...

    NervosNetwork 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tinylcy

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<