# Luna Vue
**Repository Path**: eotodo/luna-vue
## Basic Information
- **Project Name**: Luna Vue
- **Description**: luna vue开发规范
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-02-22
- **Last Updated**: 2021-11-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# luna
vue luna 开发规范
## 目录
```
|- public
|- src
|-|- assets
|-|- |- css 存放公共css
|-|- |- img 存放图片资源
|-|- |- js 存放三方js
|-|- widget 公共组件(等同vue中的components)
|-|- config 配置文件
|-|- dso 高业务耦合工具模块,不可跨项目使用
|-|-|- apis 业务网络请求
|-|-|- apis/apiUtil.js 网络请求工具函数出口
|-|-|- router 业务路由模块
|-|-|- router/index.js 业务路由集中出口
|-|- utils 低耦合性,工具函数
|-|-|- utils/index.js 工具函数集中导出出口
|-|- |-utils/tool 工具函数集合
|-|- views 视图层
|-|- APP.vue 入口文件
|-|- main.js 入口文件
```
## 基于模板开发
始终基于模块的方式来构建你的 `app`,我们期望,一个模块是应用程序中独立出去的一个部分,每一个模块只做一件事情。
### 如何做?
- 每一个 `vue` 组件首先必须专注于解决一个单一的问题,独立的,可复用的、微小的和可测试的。
- 一般来说,尽量保证每一个文件的代码行数不要超过 100 行,当然对于复杂的应用,我们要按照实际情况来。
- 尽可能保证组件的可独立运行,以方便我们后边的拿来即用。
## 组件
组件的命名需遵从以下规则:
- 有意义的:不过于具体,也不过于抽象
- 简短:2 到 3 个单词
- 具有可读性:以便于沟通交流
- \*\*必须符合自定义元素规范,使用连字符分隔单词,切勿使用保留字
- \*\*通用性:如果非常通用的话可使用一个单词来命名,这样可以方便于其它项目里复用
### 如何做?
```html
```
### 组件命名规则
组件的命名需遵循以下规则:
1. `vue` 文件代表着页面的名字
2. 放在模块文件下
3. 只有一个文件的情况下,我们尽量期望也放在目录下面,因为我们不能保证需求是否会更改,这样会影响我们的文件引入
4. 尽量是名词
5. 大写开头,开头的单词就是所属模块的名字
```js
CarDetail.vue
CarEdit.vue
CarList.vue
```
6. 简短,2-3 个单词
7. 常用结尾单词有:
```js
**Detail.vue
***Edit.vue
***List.vue
***Info.vue
***Report.vue
```
8. 以 item 结尾的代表着组件
```js
CarListItem.vue
CarInfoItem.vue
```
#### 基础组件名
- 基础组件名
应用特定样式和约定的基础组件(也就是展示类的、无逻辑的、或无状态的组件)应该以一个特定的前缀开头,比如 `base、App`。
```js
[template]
components/
|- BaseButton.vue
|- BaseTable.vue
|- BaseIcon.vue
```
#### 单例组件名
- 单例组件名
只应该拥有单个活跃实例的组件应该以 `The` 前缀命名,以表示其唯一性。
这不意味着组件只可用于一个单页面,而是每个页面只使用一次。这些组件永远不接受任何 `prop`,因为他们是为你的应用定制的,而不是它们在你的应用中的上下文。如果你发现有必须要添加 `prop` 这就表明这实际上是一个可复用的组件,只是目前在每个页面里面只使用一次。
```js
[template]
components/
|- TheHeading.vue
|- TheSidebar.vue
```
#### 紧密耦合的组件名
- 紧密耦合的组件名
和父组件紧密耦合的子组件,我们期望能够在当前文件下新建 `module`来进行存放。
#### 组件名中的单词顺序
- 组件名中的单词顺序
组件名应该以高级别的(通常是一般化描述的)单词开头,以描述性的修饰词结尾。
```js
[template]
components/
|- SearchButtonClear.vue
|- SearchButtonRun.vue
|- SearchInputQuery.vue
|- SearchInputExcludeGlob.vue
|- SettingsCheckboxTerms.vue
|- SettingsCheckboxLaunchOnStartup.vue
```
由于编辑器通常会按照字母顺序组织文件,所以我们期望把相关链的文件排列在一起。
```js
[template]
components/
|- TodoList.vue
|- TodoListItem.vue
|- TodoListItemButton.vue
components/
|- SearchSidebar.vue
|- SearchSidebarNavigation.vue
```
## 文件夹及文件命名规则
### 文件夹
1. 文件夹代表着模块的名字
2. 由名词组成
```
car、order、cart
```
3. 尽量是名词
```
good:car
bad:greet、good
```
4. 以小写开头
```
good:car
bad:Car
```
## method 方法
### methods 方法命名规则
1. 动宾短语
```
good: jumpPage、openCarInfoDialog
bad: go、nextPage、show、open、login
```
2. 尽量使用常用单词开头
```
set、get、open、close、jump
```
3. 小驼峰命名
```
good: getListData
bad: get_list_data、getlistData
```
### 组件结构化
按照一定的结构组织,使得组件便于理解。
#### 为什么?
- 导出一个清晰,组织有序的组件,使得代码易于阅读和理解,同时也便于标准化
- 合理组织,使得组件易于阅读。(name; extends; props, data 和 computed; components; watch 和 methods; lifecycle methods 等)
#### 怎么做?
组件结构化
```vue
```
## v-for 与 v-if
- 总是用 `key` 配合 `v-for`,我们强制要求为 for 循环添加 key
- 避免 `v-if` 与 `v-for` 使用在一起,我们强制要求避免 v-for 和 v-if 用在一起,如果有需要,请嵌套一层进行使用。
## Prop
### prop 命名规则
在生命 prop 的时候,其命名应该始终使用小驼峰
```js
[template]
props: {
greetingText: String
}
WelcomeMessage greeting-text="hi"/>
```
### prop 定义
prop 定义应该尽量详细,在你提交的代码中,prop 的定义应该尽量详细,至少需要指定其类型
- 指明组件的 api,所以很容易看懂组件的用法
- 在开发环境下,如果一个组件提供格式不正确的 prop,vue 将会警告,以帮助捕获潜在的错误来源。
```js
[template]
props: {
status: String
}
// 更好的做法!
props: {
status: {
type: String,
required: true,
validator: function (value) {
return [
'syncing',
'synced',
'version-conflict',
'error'
].indexOf(value) !== -1
}
}
}
```
## 元素
### 元素特性的顺序
1. is
2. v-for
3. v-if
4. v-else-if
5. v-else
6. v-show
7. v-cloak
8. v-pre
9. v-once
10. id
11. ref
12. key
13. slot
14. v-model
15. v-on
16. v-html
17. v-text
#### 详解
1. 定义(提供组件的选项)
- is
2. 列表渲染
- v-for
3. 条件渲染
- v-if
- v-else-id
- v-else
- v-show
- v-cloak
4. 渲染方式
- v-pre
- v-once
5. 全局感知(需要超越组件的知识)
- id
6. 唯一的特性(需要唯一值的特性)
- ref
- key
- slot
7. 双向绑定
- v-model
8. 其它特性
9. 事件
- v-on
10. 内容
- v-html
- v-text
### 多个特性的元素摆放规则
多个特性的元素应该分行撰写,每个特性一行。
在 js 中,用多行分割对象的多个属性是常见的最佳实践,因为这样更易读。
```js
[good]
[bad]
```
## 文件引入路径
资源引入,用“@/”来指向 src 的根路径
```html
```
css 的文件引用路径如下,用“~@”替换之前的"../../":
```css
```
vue 组件引用路径如下,用“@”直接引用 src 目录下的文件
```js
import ajaxTree from '@/components/tree/ajaxTree'
import VmTable from '@/components/table/vm-table'
```
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve 启动项目,直接打开浏览器
npm run dev 启动项目,默认不打开浏览器
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).