对角另外一面 发布于 4 月前css
上个项目第一次用到vue+webpack,也是我第一次尝试自动化、模块化的开发方式,总的来讲就是结构太烂,开发体验差,效率低,难维护。细数的罪状有以下几条html
针对上面的问题,此次作项目的时候,从新对项目结构进行了调整,调整后的项目结构以下:前端
上面的截图中,build是编译后的文件,node_modules是依赖包,webpack.config.js是webpack的配置,index.html是入口模板,这些不是本文关注的重点,本文主要是讨论src里面的结构。vue
assets的结构以下:node
├── assets ├── css # 样式 ├── fonts # 字体 └── images # 图片
主要用来放置样式、字体文件和图片等公共静态资源。其实上一个项目中也有这个目录,可是将整个项目的静态资源都往里面放了,维护起来不方便。这个项目中,asserts只存放公共的静态资源。jquery
在项目中,常常会用到一些没有npm包的第三方插件。例如此次咱们是作移动端的产品,用了淘宝自适应方案,咱们会将flexible.js等全部插件都放在static中管理。webpack
可能会在多个地方调用到的公共方法,按照不一样的功能归类成多个js文件,放在util中git
directives文件夹中包含modules文件夹,和一个统一的入口index.js,modules里是不一样指令的具体逻辑,index是全部指令的入口,方便在app.js中注册。index.js的代码以下:github
import directive1 from '.modules/directive1'; import directive2 from '.modules/directive2'; export default { ...directive1, ...directive2 }
vuex使用的是官方推荐的项目结构,modules里面是各模块的js文件。web
components里放置的是公共组件,每一个组件有本身独立的文件夹,里面包含.vue文件和组件的images等静态资源文件夹。这样的好处是,能够在组件内部管理本身的html结构、样式和逻辑和静态资源。
components的结构以下:
├── components ├── com1 # 组件1 ├── images # 静态资源:图片 └── com1.vue # template/style/script ├── com2 # 组件1 ├── images # 静态资源:图片 └── com2.vue # template/style/script
路由中包含map文件夹和入口文件index.js,map文件夹中根据模块来划分,每一个模块单独一个路由配置文件,再在index.js中汇总,app.js中引入入口文件index.js就能够实现路由的注册。index.js中的代码大概以下:
// 加载不一样的模块 import order from './order'; // 订单 import log from './log';// 登录 export default { ...order, ...log, };
在上一个项目中,没有路由层这个概念,都是在和页面的方法中直接调用后端提供的api,这个api很分散,不方便管理,后来看到vue-demo对services的划分,以为很好,就搬了过来。
services里面有个lib的文件夹,里面存放的是各类ajax类库,如jquery的ajax、vueResource等,而且对各类类库进行了统一接口的封装和错误处理,暴露给外面的是统一的ajax接口,这样很方便不一样项目,不一样类库之间的切换。services下面根据模块,将全部API封装成方法,返回的是promise对象,在要用的地方直接调用方法就能够了。
views按模块划分,模块下面有页面,页面里面有静态资源和组件。上一个项目中,页面没有拆分组件,页面和组件的静态资源也都放到了asserts文件夹中。此次都放到了自身的对应文件夹下,管理起来方便了不少。结构以下:
├── views ├── module1 # 模块1 │ ├── page1 # 页面 │ ├── components # 页面 │ ├── com1 │ ├── images // 组件1的静态资源 │ └── com1.vue # template/style/script └── page1.vue # template/style/script
此次对项目结构从新整理后,开发的体验好了不少,也避免了多人修改同一份文件,常常覆盖的问题,也大大提升了可维护性。搞项目结构可能不须要很高深的技术,可是一个好的结构真的是项目迈向成功的一大步。