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
安装方法:
- 使用 Yo Generator
|
|
- 直接拷贝项目目录
https://github.com/meanjs/mean
启动项目
首先保证数据库已在默认端口下启动。
下载或生成完成后,cd 到项目目录中,执行 npm install
与 bower install
,然后执行 grunt
启动开发服务器。
注意:由于 npm 速度太慢,可以考虑使用镜像 cnpm
,参考 https://npm.taobao.org/
配置说明
在项目根目录的 config
文件夹下存放了所有与项目相关的配置文件。其中:
- assets 的作用是指定项目要往前端页面中加入的 js 与 css 文件,以及要扫描的服务端 js 文件
- env 的作用是配置各种运行时的参数,如 Section 过期时间、数据库地址等
- lib 下面是项目的主要服务器执行逻辑,如 express 的启动、数据库的连接以及 Model 初始化等
需要注意的是,asserts 与 env 中的配置文件会按照项目的运行环境来进行区分,在加载的时候会有一个合并过程:
- 读取 default 配置
- 按照当前运行环境读取环境配置(如 development / production 等)
因此,default 配置中的配置项会被环境配置中的配置项覆盖。我们可以使用这个特性来做很多事情,最简单的比如在不同的环境下连接不同的数据库服务器,而不必更改代码。
除了 default 与环境配置以外,MEAN.js 还提供了 local 配置,用来解决本地开发环境的一些特殊需求,local 配置文件将处于合并的最高级,但它不会被提交到版本控制上面去。
文件结构说明
项目的主要业务逻辑被放在了 modules 下面。根据功能模块来划分代码,每个模块下面包括 client 端以及 server 端代码,如下所示:
|
|
需要注意的是:
- 文件夹的名字不能写错,不然就扫描不到
- 注意文件的命名(参考样例文件),便于查找
- 在 core 模块下存放了一些基础的东西,如 Node.js 用来渲染页面的 ejs 模板,以及基础路由、404 路由等
项目本身已经提供了丰富的基础样例,进行任何业务逻辑的编写都可以直接参考之。
自动化测试
测试文件分布在每个 module 下面,同样包括 client 测试与 server 测试。MEAN.js 已经集成了单元测试与 E2E 测试的框架,需要添加测试时,只需按照样例编写相应模块的测试即可。
使用 gulp test
来执行所有测试,同时,如果只想执行某一类型的测试,可以查看 gulpfile 中的具体任务定义。
发布流程
项目发布使用 gulp prod
,将会启动一个生产环境的服务器。在预配置好的自动化工具中,生产环境与开发环境的区别有:
- 移除了文件监听与热部署
- 加入了代码打包
如果我们需要其它环境(如 QA),可以参考 default 与 prod 的配置,自行添加一项 gulp 命令,并在 config 文件夹中添加相应的配置文件即可。