MEAN.js 使用手册

MEAN.js 是一套开源的 JavaScript 技术栈的 Web 项目解决方案。包含以下内容:

  • 集成 Node.js / Express / MongoDB / Socket.io 的服务器环境
  • 使用 AngularJS 的前端开发
  • NPM / Bower 包管理
  • 最常用的样例代码,包括用户注册登录、基本增删改查、页面路由等,以及服务端的权限控制
  • 自动化工具(Gulp),包括代码打包、热部署以及发布环境等
  • 按功能模块划分的深度项目结构,自动扫描项目文件
  • 完善的 Log 管理
  • 集成 ESLint
  • 各种发布环境的配置文件,如 Docker 等

总之,基本上我们能想到的项目手脚架需要的东西,它都做好了。

安装

环境要求:

  • Node.js 4.x 以上
  • MongoDB 3.x 以上
  • Python 2
  • VC++ 环境
  • Ruby

安装方法:

  1. 使用 Yo Generator
1
2
3
$ npm install -g yo
$ npm install -g generator-meanjs
$ yo meanjs
  1. 直接拷贝项目目录

https://github.com/meanjs/mean

启动项目

首先保证数据库已在默认端口下启动。

下载或生成完成后,cd 到项目目录中,执行 npm installbower install,然后执行 grunt 启动开发服务器。

注意:由于 npm 速度太慢,可以考虑使用镜像 cnpm,参考 https://npm.taobao.org/

配置说明

在项目根目录的 config 文件夹下存放了所有与项目相关的配置文件。其中:

  • assets 的作用是指定项目要往前端页面中加入的 js 与 css 文件,以及要扫描的服务端 js 文件
  • env 的作用是配置各种运行时的参数,如 Section 过期时间、数据库地址等
  • lib 下面是项目的主要服务器执行逻辑,如 express 的启动、数据库的连接以及 Model 初始化等

需要注意的是,asserts 与 env 中的配置文件会按照项目的运行环境来进行区分,在加载的时候会有一个合并过程:

  1. 读取 default 配置
  2. 按照当前运行环境读取环境配置(如 development / production 等)

因此,default 配置中的配置项会被环境配置中的配置项覆盖。我们可以使用这个特性来做很多事情,最简单的比如在不同的环境下连接不同的数据库服务器,而不必更改代码。

除了 default 与环境配置以外,MEAN.js 还提供了 local 配置,用来解决本地开发环境的一些特殊需求,local 配置文件将处于合并的最高级,但它不会被提交到版本控制上面去。

文件结构说明

项目的主要业务逻辑被放在了 modules 下面。根据功能模块来划分代码,每个模块下面包括 client 端以及 server 端代码,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
modules
│ └── moduleName
| ├── tests //测试文件
│ ├── client
│ │ ├── config //客户端配置
│ │ ├── controllers //angular controller
│ │ ├── css //可以使用 CSS 或者 SASS SCSS LESS
│ │ ├── img
│ │ ├── services //angular service
| | ├── directive //angular directive
│ │ └── views //HTML 文件
│ └── server
│ ├── config //服务端配置
│ ├── controllers
│ ├── models //Mongoose Model
│ ├── policies //权限控制模块
│ ├── routes //路由拦截
│ └── templates //服务端模板

需要注意的是:

  • 文件夹的名字不能写错,不然就扫描不到
  • 注意文件的命名(参考样例文件),便于查找
  • 在 core 模块下存放了一些基础的东西,如 Node.js 用来渲染页面的 ejs 模板,以及基础路由、404 路由等

项目本身已经提供了丰富的基础样例,进行任何业务逻辑的编写都可以直接参考之。

自动化测试

测试文件分布在每个 module 下面,同样包括 client 测试与 server 测试。MEAN.js 已经集成了单元测试与 E2E 测试的框架,需要添加测试时,只需按照样例编写相应模块的测试即可。

使用 gulp test 来执行所有测试,同时,如果只想执行某一类型的测试,可以查看 gulpfile 中的具体任务定义。

发布流程

项目发布使用 gulp prod,将会启动一个生产环境的服务器。在预配置好的自动化工具中,生产环境与开发环境的区别有:

  • 移除了文件监听与热部署
  • 加入了代码打包

如果我们需要其它环境(如 QA),可以参考 default 与 prod 的配置,自行添加一项 gulp 命令,并在 config 文件夹中添加相应的配置文件即可。