# docs
**Repository Path**: weldon_lee/docs
## Basic Information
- **Project Name**: docs
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-01
- **Last Updated**: 2021-07-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 开发环境
## Node.js
> * 安装v10.x以上
>* 不要安装奇数版本
## 包管理
### npm
修改镜像源:
```bash
npm config set registry https://registry.npm.taobao.org
```
检查镜像源:
```bash
npm config get registry
```
### yarn
通过npm安装:
```bash
npm install --global yarn
```
修改镜像源:
```bash
yarn config set registry https://registry.npm.taobao.org --global
```
检查镜像源:
```bash
yarn config get registry
```
查看yarn的bin路径:
```bash
yarn global bin
```
最后,把yarn的bin路径 `%LOCALAPPDATA%\yarn\bin` 添加到PATH环境变量。
### 为什么使用yarn?
* 速度更快,可并行处理
* 没有包依赖问题
### npm与yarn常用命令对照表
| npm | yarn | 简述 |
| ---------------- | ------------------- | -------------------- |
| npm i | yarn | 安装项目依赖包 |
| npm i -S xxx | yarn add xxx | 安装依赖包 |
| npm un -S xxx | yarn remove xxx | 删除依赖包 |
| npm i -D xxx | yarn add xxx --dev | 安装开发环境依赖包 |
| npm -S update | yarn upgrade | 升级依赖包 |
| npm ls --depth=0 | yarn list --depth=0 | 查看项目依赖的包列表 |
## VSCode插件
### ESLint
`ESLint` 主要作用于代码的静态分析,官方定义了一整套规则,可以前往 [http://eslint.cn/docs/rules/](http://eslint.cn/docs/rules/) 进行查看,每条规则都可以根据用户的习惯和团队的要求,决定开启或禁用,配置文件在项目根目录下的 `.eslintrc.js` 文件,如下:
```js
// add your custom rules here
rules: {
'prefer-promise-reject-errors': 'off',
'no-var': 1,
// allow debugger during development only
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
```
规则有3个状态可以选择,分别是:
1. `off` 或 `0`,表示关闭此规则,不进行警告和错误提示
2. `warn` 或 `1`,表示对此规则进行警告提示
3. `error` 或 `2`,表示对此规则进行错误提示
### Prettier
`Prettier` 的主要作用是代码格式化,开启保存时格式化功能,配置如下:
1. 在 `setting.json` 文件中添加以下代码:
```json
{
// ...
// 保存时格式化
"editor.formatOnSave": true,
// 使用prettier进行格式化
"editor.defaultFormatter": "esbenp.prettier-vscode",
// 保存时修复错误
"editor.codeActionsOnSave": {
"source.fixAll": true
}
}
```
2. 在项目根目录下新建 `.prettierrc` 文件:
```json
{
"singleQuote": true, // 字符串使用单引号
"semi": false, // 语句分号结尾
"useTabs": false, // 使用 tabs 缩进
"tabWidth": 2 // 2个空格替代 \t
}
```
### Vetur
主要功能如下:
* 语法高亮
* 智能提示
* 代码片断
* Emmet
* Linting / 错误检查
* 格式化
> 如果项目不使用 `Typescript` ,请手动禁用 `Vetur › Validation: Interpolation`
>
> 在 `VSCode` 点击 `文件 -> 首选项 -> 设置` 找到相应位置,然后把 `√` 去掉。
## 浏览器插件
如果无法直接下载浏览器插件,可从 [https://crxdl.com/](https://crxdl.com/) 下载crx包进行安装
### Vue devtools
* 实时编辑数据
* `time travel` 模式调试 `Vuex`
### Debugger for Chrome
* 在 `VSCode` 中调试前端代码的必装插件,如何配置请查看 [在VSCode中调试Vue项目](#在VSCode中调试Vue项目) 一节
## 调试环境
### 启动调试环境
```bash
yarn run dev
```
### 在VSCode中调试Vue项目
1. 在 vue.config.js` 文件中添加 `devtool` 参数,值为 `source-map`,如下:
```js
// vue.config.js
module.exports = {
// ...
chainWebpack(config) {
config.when(process.env.NODE_ENV !== 'development', (config) => {
// ...
config.devtool('source-map')
}
}
```
2. 在 `.vscode` 文件夹中新建名为 `launch.json` 的文件,文件内容如下:
```json
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "SQ App: chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"breakOnLoad": true,
"sourceMapPathOverrides": {
"webpack:///./src/*": "${webRoot}/*"
}
}
]
}
```
# SQ脚手架项目
## 目录结构
> ├─dist
> ├─mock
> │ ├─controller
> │ └─utils
> ├─public
> └─src
> ├─api
> ├─assets
> ├─components
> ├─config
> ├─directive
> ├─layouts
> │ └─components
> ├─plugins
> ├─router
> ├─store
> │ └─modules
> ├─styles
> ├─utils
> └─views
* /dist 构建生成的项目文件
* /mock mock相关文件
* /public 静态文件,无需webpack加工的静态文件存放位置
* /src 源文件
* /src/api 后端api的封装代码
* /src/assets 包括js、样式、图片等需要被webpack加工的资源文件
* /src/components 全局通用组件
* /src/config 配置文件
* /src/directive 自定义指令
* /src/layouts 布局模板页
* /src/plugins 插件引入文件
* /src/router 路由定义文件
* /src/store vuex全局状态定义文件
* /src/styles 样式文件
* /src/utils 工具类文件
* /src/views 页面文件
## 环境变量
项目已经预设有3种环境的变量文件,分别是 `development(开发环境)`、`production(生产环境)`、`staging(预发布环境)`,如果有其他环境也可以自行添加,变量文件存放于项目的根目录,变量文件的文件名格式为:`.env.环境名称`,例如预发布环境的变量文件名是 `.env.staging`,然后在`package.json`文件中添加一行命令,如下:
```json
// package.json
{
// ...
"scripts": {
// ...
"build:stage": "vue-cli-service build --mode staging",
}
}
```
构建命令如下:
```bash
yarn run build:stage
```
环境变量文件中,除了特殊的`NODE_ENV`变量外,自定义的变量必须以`VUE_APP_`为前缀,如下:
```yaml
NODE_ENV = 'development'
# base api
VUE_APP_BASE_API = '/dev-api'
```
然后在代码中直接引用:
```js
console.log(process.env.BASE_API)
```
## 路由定义
项目已预设两组路由,分别是`constantRoutes`和`asyncRoutes`,其中`constantRoutes`所定义的为全局路由,一般不需要改动。新增的页面路由配置一般存放于`asyncRoutes`。
### 基本配置
```js
// src\router\index.js
export const asyncRoutes = [
{
path: `/desktop`,
name: 'desktop',
component: Desktop,
hidden: true,
},
// ...
]
```
* path 路由路径
* name 路由命名
* component 路由组件
* hidden 是否在菜单中隐藏
### 延迟加载
> 使用`import`加载的页面,会在初次打开时有所延迟,初始页面不要使用此方式
```js
// src\router\index.js
export const asyncRoutes = [
{
path: `/desktop`,
name: 'desktop',
component: import('@/views/desktop/index'),
hidden: true,
},
// ...
]
```
### 嵌套路由
```json
// src\router\index.js
export const asyncRoutes = [
{
path: '/',
component: Layout,
redirect: 'index',
children: [
{
path: 'index',
name: 'Index',
component: () => import('@/views/index/index'),
meta: {
title: '首页',
icon: 'home',
affix: true,
permissions: ['admin'],
},
},
],
},
// ...
]
```
* redirect 重定向
* meta 元数据
* meta/title 在导航栏中显示的标题
* meta/icon 在导航栏中显示的图标
* meta/affix 是否固钉显示
* meta/permissions 权限列表,与用户权限列表有交集的才会在页面中显示
### 全局路由事件
```js
// src\router\index.js
// 全局前置路由事件
router.beforeEach((to, from, next) => {
console.log(`全局路由beforeEach事件: ${to.fullPath}`)
next()
})
// 全局后置路由事件
router.afterEach((to, from) => {
console.log(`全局路由afterEach事件: ${from.fullPath}`)
})
```
## 多应用
如果有多个应用想放到同一个项目进行管理,可以在项目中进行配置。首先是在`layout`页面的`appList`添加新的应用,如下:
```vue
// src\layouts\components\Logo\index.vue
```
显示效果如下:

# 部署
## 构建生产版本
```bash
yarn run build
```
## 构建预发布版本
```bash
yarn run build:stage
```