开发流程

# 项目入口 1. 项目启动时,优先进入`nuxt.config.js`配置文件,加载配置和插件 2. 启动后进入`store/index.js`内的`nuxtServerInit`方法,执行主数据的初始化。此过程,第一步(必须)通过域名获取站点配置信息并保存信息(接口通用参数、站点id、当前国家信息等);第二步获取一些主数据,例如插件配置、分类列表数据等... 3. `nuxtServerInit`方法执行完后,进到`layout/default.vue`页,这是全局的布局组件,一些全部的配置/数据获取可以放到该页 4. 最后到页面,`pages/xxx.vue`页,这里注意,在服务端渲染时,页面内的head方法必须配置,并且设置meta标题、关键字和描述信息。 # 项目调试 1. 服务端获取的数据刷新调试的时候是不会输出在浏览器的,而是在vscode的终端里面,所以在服务端获取数据的时候最好不要用`console.log`,不然部署的时候会有大量的日志信息。如果需要输出,可以在mounted方法内输出保存下来的值 2. 一些方法调试完后,请把调试信息注释掉或者删掉 # 项目开发 ## eslint 遵循项目下的.eslintrc.js内的规则,可以配置vscode实现保存自动格式化 ```js // VsCode配置eslint自动格式化 // 1. vscode先安装`eslint插件` // 2. vscode 设置(`setting.json`)加入以下代码 "eslint.options": { "extensions": [ ".js", ".vue" ] }, "eslint.validate": [ "javascript", "javascriptreact", "vue-html", { "language": "vue", "autoFix": true }, "vue", "html" ], "eslint.run": "onSave", "editor.codeActionsOnSave": { // 保存自动格式化 "source.fixAll.eslint": true } // 3. 项目目录安装插件,已安装可以跳过 ` npm install eslint babel-eslint eslint-plugin-vue eslint-plugin-html eslint-plugin-vue -D ` // 4. 项目目录放置`.eslintrc.js`文件,已有可以跳过 ``` ## 注释 关于注释,尽量加上必要的注释,特别是比较关键的逻辑,一定要加逻辑说明 1. 方法注释,例如 ```js /** * @date 2020/09/11 10:08 * @author 潜 * @description 函数作用说明 * @param { String } param1 * @param { Object } param2 * @return { String } (有返回值时写) */ function test (param1, param2) { // 关键说明,以下为演示 // 必须对a执行以下操作,否则会引起... a = Object.create({}, null) // ...do something // 逻辑说明,以下为演示 // ① 先执行... // do something // ② 保存... // do something // ③ 格式化... // do something // ④ 完成 // do something return 'aaa' } ``` 2. html注释 ```html <!-- 专题内容 --> <div> <h1>xxxx</h1> <div> <span>{{ xxx }}</span> </div> </div> ``` 3. 组件注释 ```html <template> <div></div> </template> ``` ```js <script> /** * @date 2020/09/11 10:13 * @author 潜 * @description 组件说明 */ export default { props: { data: { // 主数据 type: Obejct, default () { return {} } }, str: { // xxx type: String, default: '' } } } </script> ``` ```css // 主要的css说明,不需要全部都加说明 .test { display: none; } ``` ## 命名、使用和管理规范 1. 组件命名:`ProductList.vue`,使用时`<ProductList></ProductList>` 2. 变量命名:常量全大写 `const STATE = 12`,变量使用驼峰 let testCom = '' 3. 页面命名:`category-list.vue` 4. 接口统一在`api`目录内管理,可以分模块,使用时采用`import`形式导入 5. 全局数据统一在`store`目录下管理,可以分模块 6. `store`内的`commit`方法定义时,采用全大写的形式`SET_CATEGORY_LIST` 7. 页面/组件内引入store的变量,最好采用以下方法 ```js // 如果你已经定义了mapGetters,可以引入mapGetters import { mapState, mapGetters } from 'vuex' export default { computed: { ...mapState({ list: state => state.category.list }), ...mapGetters([ 'uid' ]) } } ``` 8. 静态资源管理,小图标统一加到iconfont,小图标(小于4KB)统一放到`assets`目录下的`images`目录,其它大文件放到`static`目录下去管理 9. ## 组件开发 1. 新版的nuxt框架,只要在`components`目录下建立的组件,可以在页 2. 对于页面内的倒计时之类的组件,一定要注意,一定要在外层套上`<client-only></client-only>`组件,否则服务会有内存溢出的情况,访问量一多服务器直接崩溃。特别注意定时器的使用!面中直接调用,无须再使用`import`引入 ## 注意事项 1. 基于服务端渲染的项目开发和spa会有区别,beforeCreate和created钩子都不能使用`window`变量,这两个钩子是在服务端实例化的,所以数据获取不要放到这两个钩子,服务端数据可以在`asyncData`或者`fetch`这两个方法内获取 2. 待补充 # 其它内容待补充