Vue项目结构概述

Vue项目结构概述

一、项目结构

├── build                   // 对 webpack 开发和打包的相关设置,包括入口文件、输出文件、使用的模块等;
├── mock                    // mock
├── node_modules            // node模块依赖
├── plop-templates          // 代码模板
├── public                  // 公共
├── src                     // src
    ├─api                   // 封装的所有请求
    ├─assets                // 主题、字体等静态资源    
    │  ├─401_images         // 401 无访问权限。
    │  ├─404_images         // 404
    │  └─custom-theme       // 主题├
    │      └─fonts          // 字体
    ├─components            // 全局公用组件 
    │  ├─BackToTop
    │  ├─Breadcrumb
    │  ├─Charts
    │  │  └─mixins
    │  ├─DndList
    │  ├─DragSelect
    │  ├─Dropzone
    │  ├─ErrorLog
    │  ├─GithubCorner
    │  ├─Hamburger
    │  ├─HeaderSearch
    │  ├─ImageCropper
    │  │  └─utils
    │  ├─JsonEditor
    │  ├─Kanban
    │  ├─MarkdownEditor
    │  ├─MDinput
    │  ├─Pagination
    │  ├─PanThumb
    │  ├─RightPanel
    │  ├─Screenfull
    │  ├─Share
    │  ├─SizeSelect
    │  ├─Sticky
    │  ├─SvgIcon
    │  ├─TextHoverEffect
    │  ├─ThemePicker
    │  ├─Tinymce
    │  │  └─components
    │  ├─Upload
    │  └─UploadExcel
    ├─directive             // 全局指令
    │  ├─clipboard
    │  ├─el-drag-dialog
    │  ├─el-table
    │  ├─permission
    │  └─waves
    ├─filters               // 全局 filter
    ├─icons                 // 项目所有 svg icons
    │  └─svg
    ├─layout                // 布局组件
    │  ├─components
    │  │  ├─Settings
    │  │  ├─Sidebar
    │  │  └─TagsView
    │  └─mixin
    ├─router                // 路由
    │  └─modules
    ├─store                 // 全局store管理
    │  └─modules
    ├─styles                // 全局样式
    ├─utils                 // 全局公用方法
    ├─vendor                // 公用vendor
    └─views                 // view页面
    │   ├─charts
    │   ├─clipboard
    │   ├─components-demo
    │   ├─dashboard
    │   │  ├─admin
    │   │  │  └─components
    │   │  │      ├─mixins
    │   │  │      └─TodoList
    │   │  └─editor
    │   ├─documentation
    │   ├─error-log
    │   │  └─components
    │   ├─error-page
    │   ├─example
    │   │  └─components
    │   │      └─Dropdown
    │   ├─excel
    │   │  └─components
    │   ├─guide
    │   ├─icons
    │   ├─login
    │   │  └─components
    │   ├─nested
    │   │  ├─menu1
    │   │  │  ├─menu1-1
    │   │  │  ├─menu1-2
    │   │  │  │  ├─menu1-2-1
    │   │  │  │  └─menu1-2-2
    │   │  │  └─menu1-3
    │   │  └─menu2
    │   ├─pdf
    │   ├─permission
    │   │  └─components
    │   ├─profile
    │   │  └─components
    │   ├─qiniu
    │   ├─redirect
    │   ├─systemmanagement
    │   ├─tab
    │   │  └─components
    │   ├─table
    │   │  └─dynamic-table
    │   │      └─components
    │   ├─theme
    │   └─zip
    │── App.vue             // 入口页面
    │── main.js             // 入口,加载组件,初始化等
    │── permission.js       // 权限管理

配置文件

.editorconfig           EditorConfig配置,控制代码样式等。https://www.jianshu.com/p/104766ccfa8b
.env.development        开发环境配置。https://blog.csdn.net/weixin_35773751/article/details/106069911
.env.production         生产环境配置。
.env.staging            测试环境配置。
.eslintignore           ESLint检测忽略的文件。https://www.cnblogs.com/kunmomo/p/14987319.html
.eslintrc.js            ESLint代码风格规范。https://www.jianshu.com/p/ad6784d028aa
.gitignore              git忽略的文件。
.travis.yml             travis配置文件。https://www.liaoxuefeng.com/article/1083103562955136
babel.config.js         babel配置文件。https://blog.csdn.net/weixin_42472040/article/details/112173176
jest.config.js          Jest配置文件。https://mubiaozhan.cn/web/content/264
jsconfig.json           指定了JavaScript 语言服务提供的功能的根文件和选项。
LICENSE                 证书。https://mubiaozhan.cn/web/content/266
package.json            定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。http://javascript.ruanyifeng.com/nodejs/packagejson.html
package-lock.json       锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。https://www.cnblogs.com/cangqinglang/p/8336754.html
plopfile.js             基于 Plop 创建 Vue component、store、view文件模板。https://mubiaozhan.cn/web/content/269
postcss.config.js       PostCSS是一款使用插件去转换CSS的工具,有许多非常好用的插件,例如autoprefixer,cssnext以及CSS Modules。https://segmentfault.com/a/1190000014782560
vue.config.js           配置文件,需自行配置。在@vue/cli-service 启动的时候会自动加载。
                        https://segmentfault.com/a/1190000016101954
                        https://blog.51cto.com/u_15302032/3066777

二、目录

2.1、api & views

api层作为一个公共的接口层,定义了所有的请求,很好保证了各个界面应用层的数据一致性。
view作为展示层,包含了业务结构和展示效果。
总之,api提供数据,view提供业务机构,两个结合起来就是一个完整的页面。
随着业务的迭代,模块还会会越来越多,所以这里建议根据业务模块来划分 views,并且 将views 和 api 两个模块一一对应。

2.2、componentsresolve(__dirname, 'src')

放置的都是全局公用的一些组件,如上传组件,富文本等等。一些页面级的组件建议还是放在各自views文件下,方便管理。

2.3、store

有些数据还是需要用 vuex 来统一管理的,如登录token,用户信息,或者是一些全局个人偏好设置等,还是用vuex管理更加的方便,具体当然还是要结合自己的业务场景的。总之,不要为了用vuex而用vuex!

三、ESLint

安装eslint插件

安装并配置完成 ESLint 后,我们继续回到 VSCode 进行扩展设置,依次点击 文件 > 首选项 > 设置 打开 VSCode 配置文件,添加如下配置

"files.autoSave":"off",
    "eslint.validate": [
       "javascript",
       "javascriptreact",
       "html",
       { "language": "vue", "autoFix": true }
     ],
     "eslint.options": {
        "plugins": ["html"]
     }

四、Axios

见:src/utils/request.js

五、多环境

package.json

"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",

代码引用:
process.env.VUE_APP_BASE_API

六、前后端交互

6.1、跨域问题

可以在后端配置:com.fallframework.platform.starter.control.config.CorsConfig

dev环境也可以通过 webpack-dev-server的proxy来解决,开发环境用nginx反代理一下就好了。

6.2、前端mock

可以使用 mock server 或者使用 mockjs + rap 或者 easy-mock 结合 swagger。

6.3、iconfont

阿里的 iconfont 它提供了png,ai,svg三种格式,同时使用也支持unicode,font-class,symbol三种方式。

6.4、优化

npm install
npm run build:prod
加打包镜像,一共是耗时如下

主站PC站基于nodejs、Vue实现服务端渲染,所以不仅需要依赖nodejs,而且需要利用pm2进行nodejs生命周期的管理。为了加速线上镜像构建的速度,我们利用taobao源 registry.npm.taobao.org 进行加速, 并且将一些常见的npm依赖打入了基础镜像,避免每次都需要重新下载。

这里注意下 建议不要使用cnpm install或者update 它的包都是一个link,反正会有各种诡异的bug,这里建议这样使用

npm install --registry=https://registry.npm.taobao.org

可优化的空间如使用webpack dll 或者把那些第三方vendor单独打包 external出去,或者使用http2 可以使用AggressiveSplittingPlugin等等,这里有需求的可以自行优化。

评论

暂无

添加新评论