成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個合理的前端應用文件結構

開發 前端
我們通過實踐發現,對于大型項目,這種架構很快就會失控。需要某種模塊化方法來輕松定位給定的文件,為各個功能設置邊界,并避免組件的緊密耦合。

在大型應用中,最關鍵且最具挑戰性的方面之一就是擁有一個良好且合理的文件結構。在考慮通過微前端將代碼庫拆分成多個應用之前,可以遵循一些步驟來改善項目級別的架構,并在您考慮這一路徑時使過渡更容易。

我們的目標是應用某種模塊化方法,使代碼庫更容易理解,通過為各個功能設置邊界,減少代碼耦合和副作用。

默認項目結構

默認情況下,當使用流行的前端框架之一搭建新項目時,組件結構是扁平的,并且沒有任何層次結構。

圖片圖片

本示例使用的是 Vue 的默認項目結構,但 React 對如何將文件放入文件夾也沒有意見。

這個例子使用了 Vue 的默認項目結構,但 React 也沒有對如何將文件放入文件夾提出意見。

  • assets:存儲應用中使用的靜態資產,如圖像、字體和 CSS 文件。
  • components:包含可重用的 Vue 組件。推薦使用扁平層次結構。
  • main.js:作為應用的入口點,啟用 Vue 并配置插件或附加庫。
  • App.vue:表示應用的根組件,作為其他組件的容器并充當主要模板。

我們通過實踐發現,對于大型項目,這種架構很快就會失控。需要某種模塊化方法來輕松定位給定的文件,為各個功能設置邊界,并避免組件的緊密耦合。

將應用分解成多個功能

將應用分解成多個功能任何大型應用都會被分解成多個獨立的功能。識別它們并不總是容易和直接的,但經過一段時間和經驗之后會變得更好。我們一起嘗試將一個流行的應用分成多個部分作為練習。

圖片圖片

Twitter 的主頁有很多內容。時間線是頁面的核心,被許多功能環繞,如導航、推文創建部分、帶有多個子組件的側邊欄、懸浮消息組件等。

圖片圖片

將構成這些功能的所有組件放在同一個文件夾中是不可維護的,即使使用 IDE 的快速查找選項,定位其中一個組件也會非常困難。

更精細的項目結構

從經驗來看,更好和更全面的文件結構如下所示:

圖片圖片

  • components:所有跨整個應用使用的共享組件。
  • composables:所有共享的 composables。
  • config:應用配置文件。
  • features:包含所有應用功能。我們希望將大部分應用代碼放在這里。稍后會詳細說明。
  • layouts:頁面的不同布局。
  • lib:應用中使用的不同第三方庫的配置。
  • pages:應用的頁面。
  • services:共享的應用服務和提供者。
  • stores:全局狀態存儲。
  • test:與測試相關的 mock、幫助程序、工具和配置。
  • types:共享的 TypeScript 類型定義。
  • utils:共享的實用函數。
  • assets:靜態資源。

在項目根目錄下運行以下命令以創建不存在的文件夾。

mkdir -p src/{components,composables,config,features,layouts,lib,pages,services,stores,test,types,utils,assets}

需要注意的三件重要事項:

Pages 文件夾:頁面文件夾已經在上下文和構建工具(如 webpack 或 Vite)將創建的實際塊方面進行了一些模塊化。將所有頁面放在一個地方非常有幫助,但其中的邏輯應保持最低限度。

Features 文件夾:為了更容易的維護和擴展,我們希望將大部分應用代碼放在 features 文件夾中。每個功能文件夾應包含特定功能的領域代碼。

共享內容:在一個理想的世界中,我們不應該有共享組件、composables、stores 和 services,所有內容都應該放在相應的功能文件夾中。不幸的是,在實際項目中,這無法避免,但我們應該提前計劃,并在將內容添加到這些文件夾時格外小心。

Features 文件夾

正如前面提到的,我們的大部分應用應該放在 features 文件夾中,分為多個子目錄。

圖片圖片

  • api:所有的 fetch 邏輯都放在這里。這將 API 和 UI 解耦。
  • components:特定功能的組件。
  • composables:特定功能的 composables。
  • stores:狀態管理代碼。多個子模塊是預期的,實際上是被鼓勵的。
  • types:特定功能的 TypeScript 類型定義。
  • index.ts:這是功能的入口點。它充當功能的公共 API,并且應該只導出應該為應用程序其他部分公開的內容。

上述的 index.ts 文件充當每個功能的公共 API。在從另一個領域導入內容時,應該僅通過此文件進行。這可以防止循環依賴,并且還可以更輕松地找到導入的來源。

// 不好的做法 ?? ?? ??
import { UserProfile } from '@/features/profile/components/UserProfile.vue'

// 好的做法 ? ? ?
import { UserProfile } from '@/features/profile'

我們可以使用 no-restricted-imports ESLint 規則來強制執行此模式。

rules: {
    'no-restricted-imports': [
      'error',
      {
        patterns: ['@/features/*/*'],
      },
    ],
    'import/no-cycle': 'error',
    ...
}

結論

以功能為導向的架構是一種有效且經過實戰驗證的結構復雜項目的方法。它允許我們將代碼解耦成獨立的模塊,并隨著應用的復雜性增加而擴展。這將通過提高代碼庫的可預測性、減少調試時間并使上手變得更容易,從而改善開發體驗。

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2024-02-07 01:32:48

頁面前端項目

2023-02-24 16:08:09

ArkUI組件應用文件管理器

2021-04-11 09:00:13

Fes.js前端

2019-03-05 11:22:06

FinalCrypt開源文件加密

2025-05-27 10:15:00

Go開發軟件架構

2017-09-11 18:24:39

企業應用自述

2010-07-28 11:04:09

Sharepoint 拓撲結構

2020-11-13 07:08:51

Spring Boot應用Spring

2022-04-06 13:43:58

Collision開源

2015-09-23 14:07:12

前端與后端架構實例

2022-10-09 08:16:29

React前端

2024-07-19 10:31:15

2014-02-17 17:47:16

前端后端架構

2019-11-07 14:00:36

MySQL數據庫SQL

2023-08-30 08:04:03

架構前端應用程序

2016-08-04 14:08:57

前端javascripthtml

2018-01-10 12:09:12

Android開發程序員

2022-03-30 19:08:00

Junction開源

2018-12-29 08:15:28

Tomcat應用部署

2015-03-19 09:51:37

Swift輸入文本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品美女视频在线观看免费软件 | 国产真实乱对白精彩久久小说 | 羞羞在线观看视频 | 久久福利电影 | 亚洲 欧美 在线 一区 | 在线观看黄免费 | 中文一区 | 欧美理伦片在线播放 | 911网站大全在线观看 | 国产在线网站 | 国产精品国产三级国产aⅴ中文 | 亚洲一二三区在线观看 | www国产亚洲精品久久网站 | 特级黄一级播放 | 在线男人天堂 | 伊人免费在线观看高清 | 黄色av大片| 亚洲福利一区二区 | 国产盗摄视频 | 久久久久资源 | 久久婷婷av | 性生生活大片免费看视频 | 在线视频一区二区 | 在线黄色影院 | 九九久久久 | 国产成人精品视频在线观看 | 欧美日韩在线视频一区二区 | 国产精品久久久久久网站 | 日韩欧美成人一区二区三区 | 国产乱码精品一品二品 | 好姑娘高清在线观看电影 | 播放一级毛片 | 久久久久久国产精品三区 | 欧美在线视频一区 | 久久亚洲国产精品日日av夜夜 | 国产色| 久久亚洲一区 | 国产精品亚洲一区二区三区在线 | 精品国产黄色片 | 久久噜噜噜精品国产亚洲综合 | 亚洲网站在线 |