vue 文件目录结构详解


Posted in Javascript onNovember 24, 2017

项目简介

基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发,可以在开发时使用 ES Next、scss 等最新语言特性。项目包含:

  1. 基础库: vue.js、vue-router、vuex、whatwg-fetch
  2. 编译/打包工具:webpack、babel、node-sass
  3. 单元测试工具:karma、mocha、sinon-chai
  4. 本地服务器:express

目录结构

├── README.md            项目介绍
├── index.html           入口页面
├── build              构建脚本目录
│  ├── build-server.js         运行本地构建服务器,可以访问构建后的页面
│  ├── build.js            生产环境构建脚本
│  ├── dev-client.js          开发服务器热重载脚本,主要用来实现开发阶段的页面自动刷新
│  ├── dev-server.js          运行本地开发服务器
│  ├── utils.js            构建相关工具方法
│  ├── webpack.base.conf.js      wabpack基础配置
│  ├── webpack.dev.conf.js       wabpack开发环境配置
│  └── webpack.prod.conf.js      wabpack生产环境配置
├── config             项目配置
│  ├── dev.env.js           开发环境变量
│  ├── index.js            项目配置文件
│  ├── prod.env.js           生产环境变量
│  └── test.env.js           测试环境变量
├── mock              mock数据目录
│  └── hello.js
├── package.json          npm包配置文件,里面定义了项目的npm脚本,依赖包等信息
├── src               源码目录  
│  ├── main.js             入口js文件
│  ├── app.vue             根组件
│  ├── components           公共组件目录
│  │  └── title.vue
│  ├── assets             资源目录,这里的资源会被wabpack构建
│  │  └── images
│  │    └── logo.png
│  ├── routes             前端路由
│  │  └── index.js
│  ├── store              应用级数据(state)
│  │  └── index.js
│  └── views              页面目录
│    ├── hello.vue
│    └── notfound.vue
├── static             纯静态资源,不会被wabpack构建。
└── test              测试文件目录(unit&e2e)
  └── unit              单元测试
    ├── index.js            入口脚本
    ├── karma.conf.js          karma配置文件
    └── specs              单测case目录
      └── Hello.spec.js

环境安装

本项目依赖 node.js, 使用前先安装 node.js 和 cnpm(显著提升依赖包的下载速度)。

自行下载并安装 node.js: https://nodejs.org/en/download/

然后安装 cnpm 命令:

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

快速开始

git clone https://github.com/hanan198501/vue-spa-template.git 
cd vue-spa-template
cnpm install
npm run dev

命令列表:

#开启本地开发服务器,监控项目文件的变化,实时构建并自动刷新浏览器,浏览器访问 http://localhost:8081
npm run dev

#使用生产环境配置构建项目,构建好的文件会输出到 "dist" 目录,
npm run build

#运行构建服务器,可以查看构建的页面
npm run build-server

#运行单元测试
npm run unit

前后端分离

项目基于 spa 方式实现前后端分离,服务器通过 nginx 区分前端页面和后端接口请求,分发到不同服务。前端物理上只有一个入口页面, 路由由前端控制(基于vue-router),根据不同的 url 加载相应数据和组件进行渲染。

接口 mock

前后端分离后,开发前需要和后端同学定义好接口信息(请求地址,参数,返回信息等),前端通过 mock 的方式,即可开始编码,无需等待后端接口 ready。 项目的本地开发服务器是基于 express 搭建的,通过 express 的中间件机制,我们已经在 dev-server 中添加了接口 mock 功能。 开发时,接口的 mock 数据统一放在 mock 目录下,每个文件内如下:

module.exports = {

 // 接口地址
 api: '/api/hello',

 // 返回数据 参考http://expressjs.com/zh-cn/4x/api.html
 response: function (req, res) {
  res.send(`
   <p>hello vue!</p>
  `);
 }
}

模块化

开发时可以使用 ES2015 module 语法,构建时每个文件会编译成 amd 模块。

组件化

整个应用通过 vue 组件的方式搭建起来,通过 vue-router 控制相应组件的展现,组件树结构如下:

app.vue             根组件(整个应用只有一个)
  ├──view1.vue          页面级组件,放在 views 目录里面,有子组件时,可以建立子目录
  │  ├──component1.vue        功能组件,公用的放在 components 目录,否则放在 views 子目录
  │  ├──component2.vue
  │  └──component3.vue
  ├──view2.vue
  │  ├──component1.vue
  │  └──component4.vue
  └──view3.vue
    ├──component5.vue
    ……

单元测试

可以为每个组件编写单元测试,放在 test/unit/specs 目录下面, 单元测试用例的目录结构建议和测试的文件保持一致(相对于src),每个测试用例文件名以 .spec.js结尾。 执行 npm run unit 时会遍历所有的 spec.js 文件,产出测试报告在 test/unit/coverage 目录。

联调方式

前后端分离后,由于服务端和前端的开发环境处于2台不同的机器上,前端的异步请求需要代理到后端机器中。 联调的时候,只需通过 proxy 参数运行 dev 脚本即可,所有 mock 目录下定义的接口将会转发到 proxy 参数指定的机器:

# 172.16.36.90:8083 为后端机器的环境地址
npm run dev -- --proxy=172.16.36.90:8083

这样,如果 mock 目录下有定义了接口 /api/hello ,将会转发到 http://172.16.36.90/:8083/api/hello

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
Aug 03 Javascript
js实现带缓动动画的导航栏效果
Jan 16 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
浅谈js数组splice删除某个元素爬坑
Oct 14 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 #Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 #Javascript
最新Javascript程序员面试试题和解题方法
Nov 23 #Javascript
详解bootstrap导航栏.nav与.navbar区别
Nov 23 #Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 #Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 #Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 #Javascript
You might like
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
php while循环控制的简单实例
2016/05/30 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
javascript读写json示例
2014/04/11 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python的一些用法分享
2012/10/07 Python
zbar解码二维码和条形码示例
2014/02/07 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
python实现猜单词小游戏
2020/05/22 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
django缓存配置的几种方法详解
2018/07/16 Python
python3.4爬虫demo
2019/01/22 Python
Python 元组操作总结
2019/09/18 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
在python shell中运行python文件的实现
2019/12/21 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
python3中确保枚举值代码分析
2020/12/02 Python
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
消防安全培训工作总结
2015/10/23 职场文书