本文章已经录制视频,地址是:http://v.youku.com/v_show/id_XODI3MjYyODI0.html

前端这两年技术飞速发展,各种优秀框架层出不穷。本文不是讨论各框架的比较,也不讨论为什么我要用angular,而不用backbone;不讨论为什么用requirejs,而不用browserify,seajs等。只是介绍平常我是怎么进行项目的前端架构。

一个成熟项目架构中应该具有哪些功能

* 快速的项目生成器——快速生成项目主体架构,单步实现controller,单步实现view,实现根据router自动生成view,controller

* 静态资源的管理——基于bower

* css动态编译——基于sass,compass实现css嵌套写法,跨浏览器实现css前缀等。

* 解耦,基于模块开发——基于requirejs

* mv*框架——基于angular实现view-model双向绑定。

* 代码管理——git管理代码版本,git submodule实现公共模块引入。

* 本地mock数据——基于express扩展,可支持get及post请求模拟

* 打包压缩上线——基于npm模块进行打包压缩,修改后时时刷新页面

项目生成器

项目生成器我已经发布为npm公共模块,地址是:

https://www.npmjs.org/package/generator-webbp

注意:因为项目生成器中默认你电脑支持sass,compass编译所依赖的环境,如果项目中最后跑步起来,请确认是否因为这个原因导致。当然有任何问题,欢迎加我的群讨论qq:236949405。

* 快速生成项目架构:

yo webbp

  根据提示操作即可。生成后,打开项目目录,1. npm install   2.grunt 即可自动打开浏览器看到项目

* 单步生成controller

yo webbp:controllers detail.about.contact

  即可生成如下文件:

|controllers
|detail
|about.js
|contact.js
detail.js

  其中detail.js中会自动加载about.js及contact.js

*单步生成view

yo webbp:views detail.about.contact

  生成如下文件:

|views
|detail
|about.html
|contact.html
detail.html

*生成routes,可自动关联view及controller

yo webbp:routess detail.about.contact

  此命令会自动调用controller,及view命令。

而生成routers代码为:

define(['./states', '../cons/simpleCons'],
function (stateModule, simpleCons) {
stateModule.config(
['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
$stateProvider.state("detail", {
abstract: true,
resolve: {
instanceBasicPromise: [ '$stateParams', function( $stateParams){ }]
},
url: "/detail",
controller: 'detailController',
templateUrl: simpleCons.VIEW_PATH + 'detail.html'
}) .state("detail.about", {
url: "/about",
views: {
detail: {
templateUrl: simpleCons.VIEW_PATH + 'detail/about.html',
controller: 'detail.aboutController'
}
}
}) }
]);
})

  其中controller及view文件都会自动生成。

静态资源的管理——基于bower

项目中引入的angularjs,jquery,bootstrap等基于bower进行依赖管理。

另外,我还发布了一个基于angular-form的扩展叫simple-form,地址是:https://github.com/cc17/angular-simple-form。是目前为止我觉得使用最方便的angular-form,基于form的model配置,并实现form-data表单提交数据和view的双向绑定。谁用谁知道,有问题欢迎提bug给我。

css动态编译——基于sass,compass实现css嵌套写法,跨浏览器实现css前缀等

这个已经不属于新姿势了,大家都知道为什么要用这个。如果你不知道这个,你肯定知道less吧

* 实现嵌套写法

.block-a{
.block-b{
.block-c{}
}
}

* 实现跨浏览器写法

该死的浏览器各种前缀,真是要醉了的节奏啊。用compass只要这么写就会编译成各浏览器识别的css,是不是很奇妙。

div{
@include border-radius(4px);
}

* 跟写js一样写css,定义变量是不是很爽

具体怎么用,大家去google吧。这个很简单。 

解耦,基于模块开发——基于requirejs 

很高兴的是前端代码越来越多了,我们再也不是只会切页面的美工了,很不幸的是我们永远不知道自己几点下班了。哎

这么多代码,我们再也不能只在一个 bigbig.js文件里放置了。怎么办呢,对分开,解耦,模块化开发。  a.js, b.js ,c.js,怎么处理依赖? seajs,requirejs,还有个browserify等等,你还可以自己写个简单的。具体应该用那个,不讨论,我就用requirejs。

mv*框架——基于angular实现view-model双向绑定

都说不要重复造轮子了,还是有各种牛逼的新框架造出来。也就说说而已,不创新,哪有技术的发展。各种框架优劣也不讨论,我的生成器是基于angular的。还要支持ie6,7的我只能说句抱歉了。使用angular有什么好处:双向绑定,依赖注入,mvc,directive声明式的扩展html标签。。。太多了。用了之后你才惊讶发现,擦,原来写好多行的代码 ,几行就搞定。妈妈再也不用担心我加班了——不过实际上,我们也没早下班哈。

代码管理——git管理代码版本,git submodule实现公共模块引入

git,svn有什么区别呢?

1.GIT是分布式的,SVN不是
2.GIT把内容按元数据方式存储,而SVN是按文件
3.GIT分支和SVN的分支不同
4.GIT没有一个全局的版本号,而SVN有:
5.GIT的内容完整性要优于SVN

另外github上有太多好东西,所以git用的人是越来越多了。

另外git还有个submodule的东西挺好用的。假如你有多个子项目,需要将通用的组件提取出来,submodule很适合。

本地mock数据——基于express扩展,可支持get及post请求模拟

前后端分离,协同合作开发,提高效率,但是有个问题,我们需要本地模拟后端的数据接口。在不会nodejs之前,我用的是wamp框架,本地启动server服务。现在nodejs发展这么迅速,各种自动化工具都可以基于nodejs开发。所以我在这个代码生成器中基于express扩展,实现对get和post请求mock。另外还可以模拟接口延时。

打包压缩上线——基于npm模块进行打包压缩,修改后时时刷新页面

最后一个问题,项目开完后,需要打包压缩上线。这也是自动化的,我们只需要在生成的项目中grunt build,最后把这个build文件发布到线上服务器即可。

总结:其实说了很多废话,总的来说,我希望这个项目模板生成器可以满足你80%以上开发需求。simple-form也希望大家试用下,给我提bug。就这样把,越写越不想写,因为感觉涉及的知识点太多,如果往下写就没边了。

我是如何基于angular+requirejs+node做SPA项目架构的的更多相关文章

  1. iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备

    安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await ...

  2. 基于 vue 全家桶的 spa 项目脚手架

    项目简介 Github: https://github.com/hanan198501/vue-spa-template 我们基于 vue-cli 脚手架生成项目模板做了一些改造,加入了 vue-ro ...

  3. 开始连载啦~每周2更共11堂iKcamp课|基于Koa2搭建Node.js实战项目教学(含视频)| 课程大纲介绍

  4. 基于Angular和Spring WebFlux做个小Demo

    前言 随着Spring Boot2.0正式发布,Spring WebFlux正式来到了Spring Boot大家族里面.由于Spring WebFlux可以通过更少的线程去实现更高的并发和使用更少的硬 ...

  5. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  6. 基于angular的route实现单页面cnodejs

    Angular ui-router 前言 之前不太理解前端怎么实现路由功能,以前知道有一种方式使用html5的pushState可以操作url才实现路由的功能,在实践项目中也用过一次,后来这种操作叫成 ...

  7. 基于ANGULAR.JS的下一代WEB应用开发-01-yeoman

    Angularjs 个人认为这是一款很好的框架!它将我们从AJAX应用的开发中解救了出来!嗯....废话就说道这里下面我们开始把! 首先我们必须了解一些核心的概念: 客户端模版 MVC 数据绑定 依赖 ...

  8. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  9. 深入理解jQuery、Angular、node中的Promise

    最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...

随机推荐

  1. 用Java实现一个堆排序

    堆可以看成是一个完全二叉树,而且非终端节点的值均不大于(不小于)其左右孩子节点的值.堆排序只需要一个记录大小的辅助空间,输出堆顶的值之后需要对堆进行调整建立新堆,找到剩下节点的最大值(最小值),反复执 ...

  2. 标准的CSS盒子模型?与低版本IE的盒子模型有什么不同的?

    CSS盒子模型:由四个属性组成的外边距(margin).内边距(padding).边界(border).内容区(width和height); 标准的CSS盒子模型和低端IE CSS盒子模型不同:宽高不 ...

  3. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

  4. c# 加密/解密 哈希

    DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复,那么 ...

  5. mongodb 修改数据结构的一个例子以及小梳理

    mongodb的存储结构是灵活可变的,但是,并不意味着我们就肆意地使用不规则的文档结构.不规则的文档结构对于开发和后期的维护都是一个灾难.所以,还是要有一个约定的格式. 但是,由于前期设计的不周详和其 ...

  6. 利用crontab自动更新SVN代码

    shell.sh#!/bin/sh source ~/.bash_profile LANG=en_US.UTF- cd /opt/web/hzcms/ svn up >> /opt/web ...

  7. redis 入门

    1.命令行工具 在windows上巧命令行指令,实在是令人痛苦,本人实在是受不了windows下cmd的笨,powershell的蠢,只能换一个了. 介绍一款cmd工具cmder(github上开源) ...

  8. php反射应用实例代码

    php反射应用示例. 代码如下:<?php function custom(){ } class custom{    public function index(){    }  } prin ...

  9. C++实现01串排序

    题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序. 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符. 输出描述:重新排 ...

  10. Java数字处理

    给出一个不多于5位的正整数,要求如下: (1)求出该数是几位数. (2)分别打印出每一位数字. (3)按照逆序打印出各位数值. 按照以上要求,首先得用户从键盘输入一个不多于5位的正整数,可以用Syst ...