# nebula-file **Repository Path**: zklytech/nebula-file ## Basic Information - **Project Name**: nebula-file - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-18 - **Last Updated**: 2024-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Installation ```shell $ yarn ``` ## Node **node版本建议在v14-16** ## Use In the project directory, you can run: ```shell $ yarn start ``` Runs the app in the development mode. Paste [http://localhost:9111/](http://localhost:9111/) to view it in the browser, since the path has been copied automatically. ## 开发 ### 1.代理配置 在 **/scripts/server.ts** 中配置,如: ```javascript // 接口代理 app.use( createProxyMiddleware('/ingress/', { target: 'https://39.98.41.186:6049/', changeOrigin: true, secure: false, }) ); ``` ### 2.页面 在 **/src/container/app/service** 目录内写需求页面 ### 3.开发说明 1、所有接口统一封装在 **/src/container/app/service/api.ts** 文件内,调接口页面再进行引入。 2、文件命名,组件后缀都用 **.tsx** ,方法及数据类型定义后缀为 **.ts** 3、组件使用react + ts,props及state都需定义ts数据类型,且避免使用 **any** 类型定义 4、className 语义化,且尽量保证复杂度,避免污染其它样式;若需要修改 antd 样式,定义className,在组件内引用的 css 文件内进行修改,不要污染全局样式 5、已定义的全局变量: **React** ,组件内无需再引入 `import React from 'react';` **_**(lodash库,所有地方可直接调用,如:**_.get('a')**) ## 开发规范 ### 一、通用书写规范 #### 1.文件/资源命名 在web项目中,使用**连字符**(`-`)来分隔文件名,可以提高可读性。例如:order-detail-view.js 。确保不用大写字母开头,不要驼峰命名。 #### 2.注释 写注释时请一定要注意:写明代码的作用,重要的地方一定记得写注释。 没必要每份代码都描述的很充分,它会增重HTML和CSS的代码。这取决于该项目的复杂程度。 ##### 注释原则 - As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。 - As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感。 ##### 3.1 单行注释 单行注释以两个斜线开始,以行尾结束 ```javascript // 调用了一个函数 setTitle(); var maxCount = 10; // 设置最大量 ``` ##### 3.2 多行注释 ```javascript /* * 代码执行到这里后会调用setTitle()函数 * setTitle():设置title的值 */ ``` ##### 3.3 函数注释 ```javascript /** * 以星号开头,紧跟一个空格,第一行为函数说明 * @param {类型} 参数 单独类型的参数 * @param {[类型|类型|类型]} 参数 多种类型的参数 * @param {类型} [可选参数] 参数 可选参数用[]包起来 * @return {类型} 说明 * @author 作者 创建时间 修改时间(短日期)改别人代码要留名 * @example 举例(如果需要) */ ``` ### 二、JavaScript规范 #### 1.通用约定 ##### 命名 **变量**, 使用驼峰命名。 ```javascript let loadingModules = {}; ``` **私有属性、变量**和**方法**以下划线 _ 开头。 ```javascript let _privateMethod = {}; ``` **通用常量**, 使用全部字母大写。 ```javascript const MAXCOUNT = 10; ``` **boolean** 类型的变量使用 is 或 has 开头。 ```javascript let isReady = false; let hasMoreCommands = false; ``` ##### && 和 || 二元布尔操作符是可短路的, 只有在必要时才会计算到最后一项。 例: ```javascript let kid = node && node.kids && node.kids[index]; let win = opt_win || window; ``` #### 2.函数设计 > 函数设计基本原则:低耦合,高内聚。(假如一个程序有50个函数;一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。) ##### **一个函数仅完成一件功能** [建议] 函数的长度应尽量控制。 将过多的逻辑单元混在一个大函数中,易导致难以维护。一个清晰易懂的函数应该完成单一的逻辑单元。复杂的操作应进一步抽取,通过函数的调用来体现流程。 特定算法等不可分割的逻辑允许例外。 ##### 函数命名 - 使用小驼峰命名 - 函数名应准确描述函数的功能,根据上下文使用动宾词组(动词 + 名词)为执行某操作的函数命名。 说明:避免使用单一的动词如`process`、`handle`等为函数命名,因为这些动词并没有说明要具体做什么。 参照如下方式命名函数:`printRecord` 、`inputRecord` 、`deleteRecord` 、`getCurrentColor`。 ### 三、React & JSX 规范 #### 1.命名规范 - **组件名称:** 推荐使用 `PascalCase`(帕斯卡拼写法,亦称为大驼峰命名); - **属性名称:** React DOM 使用 `CamelCase`(小驼峰命名) 来定义属性的名称,而不使用 HTML 属性名称的命名约定; - **style样式属性:** 采用小驼峰命名属性的 JavaScript 对象; - **引用命名:**React组件使用 `PascalCase`,组件实例使用 `CamelCase`。 ```jsx // 组件名称 ReservationCard // 属性名称 // 样式属性 // 引用命名 import ReservationCard from './ReservationCard'; const reservationItem = ``` #### 2.组件规范 - **一个文件声明一个组件:**推荐一个文件声明一个 React 组件,并只导出一个组件(多个函数式组件可以放到一个文件中); - **使用 tSX 表达式:**除非是在非 tSX 文件中初始化应用,否则不要使用 `React.createElement` ; - **函数组件和 class 类组件的使用场景:** 如果定义的组件不需要 state ,建议将组件定义成函数组件并配合 Hooks 来进行开发,否则定义成 class 类组件。 ##### 组件的代码顺序 组件应该有严格的代码顺序,这样有利于代码维护,我们推荐每个组件中的代码顺序一致性。 ```jsx export default class MyComponent extends React.Component { // 静态属性 static defaultProps = {} // 构造函数 constructor(props) { super(props); this.state={} } // 声明周期钩子函数 -- 按照它们执行的顺序 componentDidMount() { ... } // 事件函数/普通函数 handleClick = (e) => { ... } // 最后,render 方法 render() { ... } } ``` #### 3.JSX写法规范 ##### 3.1 属性 - 当属性值为true时可以省略, eslint: [react/jsx-boolean-value](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md) ```jsx // good