【山大智云项目日志】三源码分析之seahub-frontend

2021SC@SDUSC

frontend源码分析

Seahub的主要代码集中在子文件夹frontend和seahub中。frontend中主要是使用React框架实现的Seafile 的web前端。详细代码见frontend-github

frontend代码结构如下:

在这里插入图片描述

首先从package.json开始,这里可以从这个文件看到整个项目的入口文件、开发/测试/发布编译的各种命令,也可以了解到项目的依赖库、工具以及框架等等

首先是项目的名称和版本

"name": "seahub-frontend",
  "version": "0.1.0",

由于依赖的包太多,可以直接前往gitbhub文件夹下去查看,这里列举部分:

"dependencies": {  //运行环境依赖包
    "@reach/router": "1.2.0",
    "@seafile/react-image-lightbox": "0.0.1", //seafile组件
    "@seafile/resumablejs": "1.1.16",
    "@seafile/seafile-calendar": "0.0.12",
    "@seafile/seafile-editor": "^0.3.74",
    "react": "^16.8.6",              //react极其组件版本
    "react-app-polyfill": "^2.0.0",
    "react-chartjs-2": "^2.8.0",
    "react-codemirror": "^1.0.0",
    "react-cookies": "^0.1.0",
    "react-dom": "^16.8.6",
    "react-i18next": "^10.12.2",
    "react-mentions": "^3.0.2",
    "react-moment": "^0.7.9",
    "react-qr-code": "^1.0.5",
    "react-responsive": "^6.1.2",
    "react-select": "^2.4.1",
    "reactstrap": "^6.4.0",
    "seafile-js": "0.2.177",
    "socket.io-client": "^2.2.0",  //实时通信包
    "unified": "^7.0.0", 
    "url-parse": "^1.4.3", //urlparse模块中操作URL字符串
    }

从这些依赖集中可以看出主要是引入了seafile官方开发的editor、lightbox、calendar等组件并对应其版本号,resemblejs猜测是一个恢复删除文件的功能组件。可以看到下面引用了很多react框架的一些包。另外还有socket依赖等网络接口或协议需要的包。

文件里还有devDependencies对象,包括在开发状态时整个项目所有的依赖包。

scripts 字段是 package.json 中的另一种元数据功能。scripts 属性接受一个对象,它的值为可以通过 npm run 运行的脚本,其键为实际运行的命令。这些通常是终端命令,我们把它们放入 scripts 字段,可以既可以记录它们又可以轻松地重用。

 "scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "test": "node scripts/test.js --env=jsdom",
    "dev": "export NODE_ENV=development && node config/server.js"
  }

browserslist 字段
这个配置能够分享目标浏览器和nodejs版本在不同的前端工具。这些工具能根据目标浏览器自动来进行配置

 "browserslist": {
    "production": [  
      ">0.2%",
      "not dead",
      "not op_mini all",
      "ie 11"
    ],
    "development": [   //支持环境运行的浏览器
      "last 1 chrome version",  //最新版谷歌
      "last 1 firefox version", //最新火狐
      "last 1 safari version",  //最新safari
      "ie 11"                   //最新ie11
    ]
  }

Jest前端测试单源
Jest是一套开源的 JavaScript 测试框架, 它自动集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架。

"jest": {
    "collectCoverageFrom": [
      "src/**/*.{js,jsx,mjs}"
    ],
    "setupFiles": [
      "<rootDir>/config/polyfills.js"
    ],
    "testMatch": [
      "<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
      "<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
    ],
    "testEnvironment": "node",
    "testURL": "http://localhost",
    "transform": {
      "^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
      "^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
      "^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
    },
    "transformIgnorePatterns": [
      "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
    ],
    "moduleNameMapper": {   
      "^react-native$": "react-native-web"
    },
    "moduleFileExtensions": [ //模块使用的文件扩展名数组
      "web.js",
      "mjs",
      "js",
      "json",
      "web.jsx",
      "jsx",
      "node"
    ]
  }

原文地址:https://blog.csdn.net/weixin_45816464/article/details/120678275

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom