☰
Current Page
Main Menu
Home
Home
Editing
web-front-standard
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
<!--[[_TOC_]]--> # IIDP前端开发规范 [[http://192.168.175.198:10003/iidpminio/home/logo.png]] # 前言 希望IIDP开发者通过阅读本手册,能够充分利用IIDP平台进行开发,避免常见的错误和陷阱,写出高质量的代码,提高开发效率。让我们一起码出高效、码出质量的软件系统。 # 开发规范 ## 命名规范 ### 项目文件命名 1、项目文件名 【推荐】命名方法:kebab-case 字母小写短横线连接 正例:whclould-smart-port / my-project-name 反例:My-Project 2、目录名 【推荐】有复数结构时,要采用复数命名法 正例:assets、components、directives、mixins、utils、views ### 组件命名 1.【强制】 组件命名规范,组件名称必须唯一 说明:在IIDP平台中,确保组件名称的唯一性,便于识别和管理。 tech-作为名称前缀,具体的组件名作为后缀名称。 正例:tech-button / tech-dialog / tech-upload / tech-custom-multi-input 使用时type:button 反例:custom-multi-input 没有tech-作为名称前缀,会导致使用时type:custom-multi-input不显示这个组件 2、单文件组件名 【推荐】单文件组件名应该始终是单词大写开头 (PascalCase),大驼峰式命名法。 正例:CustomComponent.vue 反例:my-Component.vue 3、基础组件名 【推荐】基础组件在一个页面内可使用多次,在不同页面内也可复用,是高可复用组件。应该全部以一个特定的前缀开头 —— Base 正例:BaseButton.vue/ BaseInput.vue 反例:myButton.vue 4、业务组件 【推荐】掺杂了复杂业务的组件(拥有自身 data、prop 的相关处理)即业务组件应该以 Custom 前缀命名。 正例:CustomCard.vue 反例:myCard.vue 5、组件名中单词顺序 【推荐】组件名应该以高级别的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾。组件名尽量以完整单词命名,单词尽量语义化,方便阅读。 正例:SearchContent.vue 反例:ContSech.vue ### 代码参数命名 1、【推荐】在声明 prop 的时候,其命名应该始终使用 camelCase(小驼峰式命名),而在模板和 JSX 中应该始终使用 kebab-case(短横线连接式)。我们单纯的遵循每个语言的约定,在 JavaScript 中更自然的是 camelCase。而在 HTML 中则是 kebab-case 正例:camelCase 反例:camel-Case 2、router属性 【推荐】Vue Router Path 命名采用 kebab-case (短横线连接式)格式。或者PascalCase(大驼峰命名),推荐使用kebab-case 短横线。 用 Snake(下划线连接式)(如:/user_info)或 camelCase(小驼峰命名)(如:/userInfo)的单词会被当成一个单词,搜索引擎无法区分语义 3、模板中组件 对于绝大多数项目来说,在单文件组件和字符串模板中组件名应该总是 PascalCase(大驼峰命名) 的,但是在 DOM 模板中总是 kebab-case (短横线连接式)的。 4、全局变量,全局方法名称使用应用名称+功能名称 正例: ```js const IOT_THEME_OPTIONS = ['blue', 'red', 'green'] function iotGetSearchParams(params){ console.log(params) } ``` 反例: const MY_TE = ['blue', 'red', 'green'] 5、变量 命名规范:类型 + 对象描述或属性的方式 正例:camelCase 6、常量 命名规范:使用大写字母和下划线来组合命名,下划线用以分割单词,力求语义表达完整清楚 正例:const MAX_COUNT = 10 //全部大写下划线分割 反例: const MC = 10 7、方法 命名规范:统一使用动词或者动词 + 名词形式 正例:jumpPage、loginIn、openDialog、getListApi、refresh 反例:pageGet 8、事件方法 命名规范:handle + 名称(可选)+ 动词 正例: ```js <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="100" layout="total, prev, pager, next" :total="1000"> </el-pagination> ``` 反例: ```js <el-pagination @size-change="change" @current-change="currentChange" :current-page.sync="currentPage1" :page-size="100" layout="total, prev, pager, next" :total="1000"> </el-pagination> ``` ## 代码规范 【强制】为 v-for 设置键值,在组件上必须用 key 搭配 v-for,以便维护内部组件及其子树的状态。 【强制】v-if 和 v-for 互斥,永远不要把 v-if 和 v-for 同时用在同一个元素上。 【强制】多个 attribute 的元素应该分多行撰写,每个 attribute 一行。视情况而定 【强制】模板中简单的表达式,组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。 复杂表达式会让你的模板变得不那么声明式。我们应该尽量描述应该出现的是什么,而非如何计算那个值。而且计算属性和方法使得代码可以重用。 【强制】指令缩写 用 : 表示 v-bind: 用 @ 表示 v-on: 用 # 表示 v-slot 【推荐】不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。 【推荐】条件判断能使用三目运算符和逻辑运算符解决的,就不要使用条件判断,但不要写太长的三目运算符。如果超过 3 层请抽成函数,并写清楚注释。 【推荐】慎用 console.log,因 console.log 大量使用会有性能问题,调试完最终提交前清除掉 ## 注释规范 注释的原则:提高代码的可读性,从而提高代码的可维护性 如无必要,勿增注释 ( As short as possible ) 如有必要,尽量详尽 ( As long as necessary ) 1、HTML 文件注释 【推荐】单行注释:一般用于简单的描述,如某些状态描述、属性描述等。注释内容前后各一个空格字符,注释位于要注释代码的上面,单独占一行。 2、模块注释 【推荐】一般用于描述模块的名称以及模块开始与结束的位置。 注释内容前后各一个空格字符 ## 扩展规范 1、主题扩展 【强制】对页面顶部,侧边栏,菜单等公共模块的扩展 需独立新增app内扩展,可以单独自行安装卸载,以免影响全局 2.【推荐】扩展名称使用应用名称+菜单名+功能名称 正例:iot_iiot_program_menu_search_extend 反例:unit_test_extend_view 不明确生效的位置和功能 3、样式扩展 【强制】对框架使用的Element的样式修改时,使用局部作用域,以免影响全局样式 4、关于扩展选择的节点id 【强制】在选择扩展的节点id时,对于id中包含undefined的节点不能直接扩展,请咨询平台人员 5、关于扩展注释 【推荐】在对某节点扩展时,补充注释信息,说明页面节点,功能描述等信息,方便阅读、定位 # 版本管理规范 ## 关于版本更新 为了确保线上使用的依赖版本与开发时的版本一致,有以下几项注意事项: 1、执行npm run update:tech、npm run update:beta、npm update等命令升级后依赖版本中会带有 ^ 等符号,如果需要使用固定版本,需要手动修删除 ^ 符号,使用固定的具体的版本号,并执行npm run init:tech重新安装指定版本 正例: ```json // 固定(指定)的版本号 { "dependencies": { "@tech/t-base": "1.0.11", "@tech/t-build": "1.0.1", "@tech/t-core": "1.0.9", "@tech/t-el-ui": "1.0.9", } } ``` 反例: ```json // 不固定的版本号,(不推荐) { "dependencies": { "@tech/t-base": "^1.0.11", "@tech/t-build": "^1.0.1", "@tech/t-core": "^1.0.9", "@tech/t-el-ui": "^1.0.9", } } ``` 2、为了保证打包稳定,请直接使用当前开发环境所安装的依赖,不需要执行 npm run update:tech 或者 npm run update:beta # 工程结构规范 ## 工程结构说明 ```js |— apps |— base // 业务App 根据实际情况命名 |— common // 公共总扩展,一般情况不用操作,后面会展开讲解 |— common - 公共总扩展 |— assetImport.js - 内部导入连接资源扩展入口 |— asset.json - 外部url连接资源扩展入口 |— common.js - 应用公共配置扩展入口 |— comps.js - 定制组件扩展入口 |— extendView.js - 合并视图扩展入口 |— hook.js - 功能钩子扩展入口 |— schema.js - 初始视图结构扩展入口 |— index.js - 公共扩展总入口 |— views // 纯js格式编辑视图,通过视图的扩展能力合并的主视图中 |— rbacUser // 业务定制的扩展视图,名称根据实际情况定义 |— tview__base__rbac_user.js // 扩展文件,后面会展开讲解 命名规则:[自定义业务名].js |— ... |— index.js // 扩展视图的入口 |— config // 当前App的额外配置,如全局变量 |— app.json |— resource // 语言包,皮肤 等资源 |— static-resource // 静态资源 |— index.js // 扩展引入入口 |— component // 公共业务组件 |— config |— nginx |— apps.json |— build // 各种环境的打包入口 ``` 工程运行起来后,以下文件夹是工程临时生成文件不用处理: resource、static-resouorce、views、dist、distApp、distTmp ## 资源引入规范 1、资源引入 【强制】前端依赖的第三方库,或组件库的资源地址引入需要做以下配置: 外部资源需要在./apps/[自己的扩展应用]/common/assets.json配置引入 内部资源需要在./apps/[自己的扩展应用]/common/assetsImport.js配置引入 2、资源扩展 asset.json资源引入扩展,会根据定义里面的 title 作为唯一标识覆盖合并 assetImport.js资源引入扩展,会根据定义里面的 key 值作为唯一标识覆盖合并, 例如上面的 assetImport.js 引入组件库的key值为 my-ui。 # 部署规范 1、底座的更新只能通过更新服务器中前端工程。 2、app 的更新可通过应用市场更新,可也以通过服务器部署更新 3、打包外部依赖 app 和本地开发的 app 到./dist/umdComps中。适用于通过应用市场上传安装 【强制】主服务器的 nginx 需要增加允许跨域 1、所有的涉及静态资源转发的都需要配置允许跨域 2、涉及代理转发的不需要设置跨域
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel