Hybird框架UI重构之路:三、工欲善其事,必先利其器

上篇回顾:Hybird框架UI重构之路:二、事出有因

工欲善其事,必先利其器,事是重构的目标,器是开发环境。

这篇文章将讲述重构时的UI框架的目录结构,且需要使用的开发工具。

目录结构

demo : 开发框架的模板(单页模式)

demo-muti : 开发框架的模板(多页模式)

demo-scene : 示例模板。一个完整的示例,目的是给使用者稍作修改就可以使用在项目上。

demo-template : 给使用者使用的开发模板。

demo-whole : 可在PC上演示的示例模板

dist : UI框架的提供的库

doc : 文档目录

libs : UI框架依赖的库,注明版本。

node_modules : node工具

src : UI框架源码

Gruntfile.js : Gruntfile.js配置css、image、javascript、html合并、压缩等

package.json : package.json文件来声明项目中使用的node模块

PS:这个是一级目录,其他层级的也就不截图了。

less

关于less的这个工具的文章很多,我也就不详细说,主要为了方便 CSS 的书写及维护、复用。

其实使用less,有利也有弊,但总归利大于弊。

利:

1.一看就了解样式应用的范围(这是我觉得最好的地方),比纯css好理解。

.module {
 div {
  a {
   //styles
  }
 }
}

2.LESS 在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本。

弊 :

1.毕竟最后生成的样式跟最初less样式还是有些区别,当页面样式做调整的时候(一般是在chrome调试),调试完样式后,又要将自己修改的样式写成less样式,看起来麻烦很多。

例:

自己增加了

.module li {
     line-height:18px;
}

后面写回less样式

.module {
   li {
          line-height:18px;
   }
}

然后再重新生成css文件。

PS:简单来说就是调试麻烦。

另外我使用的也只有两条简单的命令

lessc xxx.less > xxx.css
lessc -x xxx.less > xxx.min.css

后面那条是压缩后的文件。

grunt

grunt这个工具(nodeJs的命令行工具),我用来做Javascript文件的合并、压缩和复制。

以前UI框架的版本是一个大文件bingotouch.css,js也是。这是不利于我们开发的,于是我将他们拆分成模块,拆分之后又面临合并的问题,于是就使用grunt这个工具。

grunt的安装

1、nodeJs环境

因为grunt是基于nodeJs的,所以首先需要安装nodeJS环境

2、安装grunt

安装grunt,因为我们可能在任何目录下运行打包程序,所以我们需要安装CLI

grunt的命令行:

npm install -g grunt-cli

3、编写package.json(声明项目中使用的node模块)

{
    "name":"BingoTouch",
    "version":"3.0.0",
    "engines":{
        "node":">= 0.8.0"
    },
    "devDependencies":{
        "grunt":"~0.4.0",
        "grunt-contrib-concat":"~0.3.0",
        "grunt-contrib-copy" : "~0.4.1",
        "grunt-contrib-cssmin" : "~0.6.0",
        "grunt-contrib-uglify":"~0.2.0",
        "express":""
    }
}

grunt-contrib-concat : 文件合并

grunt-contrib-copy : 文件复制

grunt-contrib-cssmin : css压缩

grunt-contrib-uglify : js压缩

4、编写Gruntfile.js

module.exports = function(grunt){
     grunt.initConfig({
        pkg : grunt.file.readJSON(‘package.json‘),
          concat : {
            ‘dist/bingotouch.js‘ :
                [‘demo/js/ui.js‘,
                "demo/js/module/ui.GarbageCollection.js",
                ‘demo/js/module/ui.plugins.js‘,
                ‘demo/js/module/ui.Utils.js‘,
                ‘demo/js/module/ui.Element.js‘,
                ‘demo/js/module/ui.Transition.js‘,
                ‘demo/js/module/ui.Page.js‘,
                ‘demo/js/module/ui.IScroll.js‘,
                ‘demo/js/module/ui.alias.js‘,
                ‘demo/js/module/ui.Popup.js‘,
                ‘demo/js/module/ui.Skin.js‘,
                ‘demo/js/module/ui.Menu.js‘,
                ‘demo/js/module/ui.Tab.js‘,
                ‘demo/js/module/ui.SwipeListview.js‘,
                ‘demo/js/plugin/zepto.extend.js‘,
                ‘demo/js/plugin/zepto.ui.js‘,
                ‘demo/js/plugin/zepto.ui.slider.js‘,
                ‘demo/js/plugin/zepto.ui.navigator.js‘,
                ‘demo/js/plugin/zepto.ui.navigator.iscroll.js‘]/*,
            ‘dist/bingotouch.css‘ : [‘demo/css/base.css‘,‘demo/css/module/*.css‘]*/
          },
        uglify : {
            target : {
                files : {
                    ‘dist/bingotouch.min.js‘: ‘dist/bingotouch.js‘
                }
            }
        }/*,
        cssmin : {
            target : {
                files : {
                    ‘dist/bingotouch.min.css‘: ‘dist/bingotouch.css‘
                }
            }
        }*/,
        copy : {
            target : {
                files : [
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘demo/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘,‘bingotouch.min.js‘],dest: ‘demo-muti/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘demo-scene/link/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘demo-scene/news/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘demo-scene/business/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘,‘bingotouch.min.js‘],dest: ‘demo-template/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘demo-whole/js/‘} ,
                    {expand: true,cwd: ‘dist/‘,src: [‘bingotouch.js‘],dest: ‘doc/api-doc/‘} ,
                    {expand: true,cwd: ‘demo/js/plugin/‘,src: [‘linkplugins.js‘,‘sharesdkplugin.js‘],dest: ‘doc/api-doc/‘},

                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘,‘bingotouch.min.css‘],dest: ‘demo-muti/css/‘} ,
                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘],dest: ‘demo-scene/link/css/‘} ,
                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘],dest: ‘demo-scene/news/css/‘} ,
                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘],dest: ‘demo-scene/business/css/‘} ,
                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘,‘bingotouch.min.css‘],dest: ‘demo-template/css/‘} ,
                    {expand: true,cwd: ‘demo/css/‘,src: [‘bingotouch.css‘],dest: ‘demo-whole/css/‘}
                ]
            }
        }

     });
    grunt.loadNpmTasks(‘grunt-contrib-concat‘);
    grunt.loadNpmTasks(‘grunt-contrib-uglify‘);
    /*grunt.loadNpmTasks(‘grunt-contrib-cssmin‘);*/
    grunt.loadNpmTasks(‘grunt-contrib-copy‘);
    grunt.registerTask(‘default‘, [‘concat‘,‘uglify‘/*,‘cssmin‘*/,‘copy‘]);
}

这文件的配置是我重构后,css和js的合并、压缩、复制。细心的人会发现cssmin的功能我没使用,这是因为我的css是less编写的,所以css文件的合并压缩也就由less工具完成。

yuidoc

文档是作为框架必不可少的一部分,如果快捷方便生成文档也是我们考虑的。

这是我之前对文档化工具的调查:http://www.cnblogs.com/lovesong/p/3267047.html

我选择了yuidoc作为文档化工具,下面是我生成的文档。

在此说下一些YUIDoc的信息

是什么?

YUIDoc是个NodeJS应用,能将你JS代码中的注释生成HTML格式的API文档。

支持语言?

事实上,不仅是JS,任何支持块注释(指/* */)的语言都能用。

特性:

只解析YUIdoc的注释块,不解析源代码。

安装步骤:

1.安装NodeJS,下载地址:http://nodejs.org/download/

2.打开cmd,执行命令npm -g install yuidocjs,即可安装YUIDoc。

YUIDoc注意事项

1.设定一个类即@class之后,YUI默认把之后函数或属性归属为这个类,直到有类重新定义。

2.注释方式

/**
    YUIDoc会认这以两个星开头的
*/
/*
    YUIDoc不认一个星开头的
*/

3.每个注释块中能有且仅有一个主标签

YUIDoc标签

由于标签的介绍内容太多,就不在这里介绍了。

YUIDoc模板

页面生成模板。根据我们注释的标签(充当数据源),在根据页面模板(视图),生成文档。

github上有很多主题模板,而上面图片的使用的模板是我觉得最好看的,所以就选择了这个。

PS:github是好东西,善用能帮我们很多。

yuidoc.json

生成文档有个命令,一般我是准备好注释好的js文件,在加上一个yuidoc.json的配置文件,然后是控制台cd到这个目录,执行命令。

 yuidoc . 

简单描述下yuidoc.json的东西

{
    "name": "BingoTouch API",
    "description": "让开发人员可以使用Web开发技术,如:HTML5、CSS3、Javascript等,开发出与原生程序具有相同用户体验的移动终端应用",
    "version": "3.1.0 Powered By 云应用平台部",
    "url": "XXXXXXXXXXXXXXX",
    "options": {
        "linkNatives": "true",
        "outdir": "./docs",
        "paths":"code/",
        "themedir": "../yuidoc-theme-blue-master"
    }
}

这里有两个重要的属性

outdir : 生成的文档放置的文件路径。

themedir : 这个是之前所说的主题模板,如果没有设则模式使用yuidoc的默认模板。

总结

这篇工具的说明就到此了,工具的使用无非就是为了方便开发,上面的描述也许不这么详细,希望是做到指引的作用。

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址:http://www.cnblogs.com/lovesong/p/4296871.html

时间: 2024-10-23 12:21:03

Hybird框架UI重构之路:三、工欲善其事,必先利其器的相关文章

Hybird框架UI重构之路:四、分而治之

上文回顾:Hybird框架UI重构之路:三.工欲善其事,必先利其器 上一篇文章有说到less.grunt这两个工具,是为了css.js分模块使用的.UI框架提供给使用者的时候,是一个大的xxx.js.xxx.css,但在开发时候,必须划分模块. CSS模块划分 1.variables.less 这里面是一些样式的变量.函数 例: 字体: @baseFontSize: 20px; 圆角: .rounded-corners (@radius: 5px) { border-radius: @radiu

Hybird框架UI重构之路:六、前端那点事儿(Javascript)

上文回顾 :Hybird框架UI重构之路:五.前端那点事儿(HTML.CSS) 这里讲述在开发的过程中,一些JS的关键点. 换肤 对于终端的换肤,我之前一篇文章有说了我的想法. 请查看:http://www.cnblogs.com/lovesong/p/4122262.html iscroll的问题 1.使用iscroll的页面里面有表单元素,当键盘弹出再缩回后,页面拖不到最顶地方. 这个在android上总出现,使用的iscroll版本是4.2.5. 这原来是个很棘手的问题,导致了有input

Hybird框架UI重构之路:五、前端那点事儿(HTML、CSS)

上文回顾 :Hybird框架UI重构之路:四.分而治之 这里讲述在开发的过程中,一些HTML.CSS的关键点. 单页模式的页面结构 在单页模式中,弱化HTML的概念,把HTML当成一个容器,BODY中显示的主体内容才是页面,一个HTML容器中可以存放1个或者多个页面,每个页面放置于section中.而一个页面(section)中必有主体内容(content),也有可能包含头部内容.底部内容,甚至一些侧滑菜单等. 所以,以我们通常看到的一个移动应用的界面中包含了顶部Title和主体内容的页面代码如

Hybird框架UI重构之路:二、事出有因

上篇回顾:Hybird框架UI重构之路:一.师其长技以自强 一切的重构都是有原因的,或许为了更快速度.更好体验.更快捷开发等,于是就有了自己的开发目标,简单看看未重构前UI("中国移动式"风格). 上一篇文章说明调查了这么多类似框架,对比了他们的特点,而比对自身UI,也是存在可优化的地方,于是有了下面几点目标(仅仅UI框架方面,不涉及原生部分). (1)规范开发 1.SVN版本控制.之前的UI框架部分是没有进行svn版本控制的,于是会导致个问题——有些文件在多次修改后,连当初的开发者都

Hybird框架UI重构之路:一、师其长技以自强

这两年在支撑公司的Hybrid框架的运维发展,让人确认这种移动开发方式确实是一条不错的路.混合应用这种开发方式降低开发难度,极大的提高开发效率,最重要的一点效果可以接近原生应用.框架的本身是需要持续不断发展的,这里开始我讲述我重构Hybird框架的UI的这三个月(2014-11——2015-1),而在重构之前,预先调查了目前所了解的几个混合应用的框架,师其长技以自强. PS:Hybrid应用是web页面与原生壳(Android.IOS)的结合最后打成安装包的应用. 重构的前奏曲: ApiClou

Android 项目重构之路:界面篇

在前一篇文章<Android项目重构之路:架构篇>中已经简单说明了项目的架构,将项目分为了四个层级:模型层.接口层.核心层.界面层.其中,最上层的界面,是变化最频繁的一个层面,也是最复杂最容易出问题的一个层面,如果规划不好,很容易做着做着,又乱成一团了. 要规划好界面层,至少应该遵循几条基本的原则: 保持规范性:定义好开发规范,包括书写规范.命名规范.注释规范等,并按照规范严格执行: 保持单一性:布局就只做布局,内容就只做内容,各自分离好:每个方法.每个类,也只做一件事情: 保持简洁性:保持代

Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具

Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路,覆写了一篇 Google主推-Android开发利器--Android Studio,这可能是最全的AS教程! Android Studio,自Google2013年发布以来,就倍受Android开发者的喜爱,我们本书,就是基于Android Studio来进行案例演示的,大家都知道,Android

(转)Android项目重构之路:界面篇

在前一篇文章<Android项目重构之路:架构篇>中已经简单说明了项目的架构,将项目分为了四个层级:模型层.接口层.核心层.界面层.其中,最上层的界面,是变化最频繁的一个层面,也是最复杂最容易出问题的一个层面,如果规划不好,很容易做着做着,又乱成一团了. 要规划好界面层,至少应该遵循几条基本的原则: 保持规范性:定义好开发规范,包括书写规范.命名规范.注释规范等,并按照规范严格执行: 保持单一性:布局就只做布局,内容就只做内容,各自分离好:每个方法.每个类,也只做一件事情: 保持简洁性:保持代

重构之路 峰回路转

其实敲代码的时间并不是太长,往往调试的时间很长,登录早就敲完了,可是迟迟运行不出想要的结果,甚至不能完整的从U层运行到D层,实在是让人揪心,先后请了三位高手帮我调试,愣是没有发现错误在哪里. 在今天的上午,问题有了转机,终于是将登录完整的运行下来了,也得到了预期的反馈,因此在下午的时候就再次尝试加入配置文件,没想到一个意想不到的警告信息让我相信之前的判断是正确的,于是顺藤摸瓜终于找到了问题的根源,万万没想到,一系列问题的答案竟是如此简单,让人哭笑不得. 先来分析分析报错信息,以便找到解决问题的线