`
yiminghe
  • 浏览: 1460177 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用 ant 简洁构建前端

阅读更多

ant 是 java 方面有用的构建工具,贯穿开发的编译,打包,测试,部署等各个阶段,其实对于前端开发,如果合理利用同样能够大幅减少繁琐的构建过程,摆脱各个平台晦涩异化的批处理脚本。


1.文件与目录准备操作

 


主要包括前期的一些准备工作:例如最常用的将源码复制到构建目录,准备进一步的操作,主要利用 copy 任务

 

<copy todir="目的地目录"
              encoding="读取编码"
              outputencoding="写入编码">
            <fileset dir="文件来源目录"
                     includes="**/*(文件名称正则)"/>
        </copy>

 其中 fileset 表示无序文件集合,若要求有序,可替换为 filelist 有序列表以及广义的 path。 注意点为 fileset 的 includes 与 excludes 属性,其中 ** 匹配0个或多个目录,*匹配0个或多个文件。在copy过程中也可进行一些过滤处理,设置过滤器集合对源码进行一些标记替换,如加入构建时间:

 

<!--设置日期格式-->
<tstamp>
    <format property="timestamp.isoformat"
            pattern="yyyy-MM-dd' 'HH:mm:ss" locale="en"/>
</tstamp>

<copy ...">
    <fileset ... />
    <filterset>
        <filter token="TIMESTAMP" value="${timestamp.isoformat}"/>
    </filterset>
</copy>

 

即将源码中的预设标记 @TIMESTAMP@,替换为当前时间。其它还有 mkdir , move 等类似对对应批处理命令的加强。


2.压缩

 


对应于编译型语言构建的编译阶段,压缩优化 源码 ,推荐 css采用 yuicompressor ,JavaScript采用 google closure-compiler 。ant 可以通过 java  任务来方便地调用外部 java 程序,并且在同一 jvm 内运行也避免了通过 exec 执行外部程序的效率问题。不过由于压缩器每次只能针对单个源文件进行操作,这时就需要使用 ant 的 批处理任务(bulk task):apply

 

<apply executable="java"
               dest="目的地"
               failonerror="true"
               parallel="并行执行"
                >
            <fileset dir="css源地址"
                     includes="**/*.css"/>
            <arg line="-jar"/>
            <arg path="yuicompressor.jar"/>
            <arg line="--charset ${charset}"/>
            <srcfile/>
	
            <arg line="-o"/>
            <targetfile/>
            <mapper type="regexp" from="^(.*)\.(css|js)$" to="\1-min.\2"/>
        </apply>

 

两个比较关键的元素为 srcfile 与 targetfile ,srcfile 注意用fileset的每个文件替换掉 srcfile,并且经过 mapper 转换后,用转换后包含完整路径的文件名替换掉 targetfile,达到了对文件集合中的每个文件逐一执行 yuicompressor 的目的。



3.打包

 


对于前端代码,打包的意义在于减少http链接数 ,主要用到的 ant 任务:concat ,将多个文件合并为一个文件

 

<concat destfile="目的文件"
                encoding="读取编码"
                outputencoding="写入编码">
    <filelist .../>
</concat>

 

同 copy 类似,若要求合并后的文件内容顺序,则使用filelist,否则使用fileset即可。

 

 

注意:

 

windows 下保存 utf-8 编码的文件时常带 bom 标记 ,而多个 bom 文件如果使用 concat 原封不动合并起来,那么实际上该合并后的脚本是语法错误的,这时合并时需要使用 filterchain 来消除文件中的 bom 标记:

 

<concat destfile="z-pkg.js" encoding="utf-8" outputencoding="utf-8">
            <path location="x"/>
            <path location="y"/>
            <filterchain>
                <deletecharacters chars="&#xFEFF;" />
            </filterchain>
</concat>

 

而另一方面 ie 载入 utf-8 格式的文件如果不带 bom ,则会有奇异问题(缓存情况下的动态加载报错),这是最好合并后再使用 header 把 bom 加上:

 

<concat destfile="z-pkg.js" encoding="utf-8" outputencoding="utf-8">
            <header filtering="no" trimleading="yes">&#xFEFF;</header>
            <path location="x"/>
            <path location="y"/>
            <filterchain>
                <deletecharacters chars="&#xFEFF;" />
            </filterchain>
</concat>

 

4.部署编码注意

 

 

2010-09-25 update:

打包与压缩只是单单对文本进行变换处理,并没有改变文件的编码,而最终部署到应用环境时,常常要求对编码的普适性,在中文环境中则不可避免会遇到各种各样的乱码,还好 javascript 支持 unicode 转义字符

 

In string literals, regular expression literals, and identifiers, any character (code unit) may also be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits.

 

通过 native2ascii 任务(yui compressor 可忽略这步),可以将代码中的中文字符转换为 "\uxxxx" 对应的 unicode 表示。

 

<native2ascii
                encoding="${charset}"
                src="${build.dir}"
                dest="${build.dir}"
                includes="**/*-pkg-min.js"
                >
            <mapper type="regexp" from="^(.*)\.js$" to="\1-ascii.js"/>
        </native2ascii>

 属性同 copy 部分,mapper 同 apply 部分。


5.分支与循环

 


如果想要对构建过程进行细粒度的控制,例如根据依赖条件进行特定的构建,则可使用 ant contrib 第三方任务包的 if 任务 。if的判断条件可以直接使用ant的condition 任务的条件。

 

xmlns:ac="antlib:net.sf.antcontrib"
<ac:if>
    <!--能否上网?-->
    <http url="http://www.github.com"/>

    <ac:then>
        <!--能-->
    </ac:then>
    <ac:else>.
        <!--不能-->
    </ac:else>
</ac:if>
 

另外如果代码依赖于目录组织结构,相互间具备平行关系,则可使用循环 for 任务,依次对所有目录进行操作,使得构建具备良好的扩展性。

 

<ac:for param="biz">
    <path>
        <dirset dir="循环目录集合父目录" includes="*"/>
    </path>
    <sequential>
        <!--通过 @{biz} 得到单个枚举-->
    </sequential>
</ac:for>

 

6.多模块组织

 


当项目中多个模块间构建文件具备明显的重复目标(target)时,可通过 import 任务,利用 template 模式抽像公共目标为模板,各个子模块引入公共模板后进行特化的目标重写或者更简单的属性重定义。


公共模板:

 

<project>
<target name="common">
取 属性 ${p1} 进行操作
</target>
</project>
 

 

子模块

 

<project>
定义 p1 属性

导入公共目标模板
<import ...>
</project>
 

 

子模块可继承公共模板的所有目标,只需定义相应属性即可。


7.多模块构建

 


目前为止,一个项目的所有子模块都有了自己独立的构建文件,若我们想一次将整个项目构建,则需要对所有的子模块运行各自的构建,这时就需要 subant 任务,运行构建文件的集合。

 

 

<subant target="所有的构建目标" inheritall="子构建同父构建属性独立">
     <fileset dir="所有构建文件来源" includes="**/build.xml"/>
</subant>

 

其中fileset 即为构建文件的集合。


8.扩展 ant 命令

 


待续

 

总结

 


ant 初始是作为声明式语言而设计,而由于其接口开放性,自从出现了 ant contrib 等第三方任务包,使其具备了过程化,越来越接近于传统的批处理脚本,并且由于 java 天生的跨平台性以及 xml 完善的描述性语法,相信在 java 构建之外也会有广阔的天地。

 

 

 

 

 

 

 

分享到:
评论
2 楼 yiminghe 2010-09-21  
goldenlove 写道
问下... Mapper里我如果不想实现文件改名为 *-min.js , 而是想实现到 /min/ 目录下呢?
为了保持文件名不变,我试过用 <identitymapper/> ,但是没有任何效果...不知为啥?


仔细看:http://ant.apache.org/manual/Types/mapper.html例子,
使用正则表达式任何转换都可以达到

试试:

<mapper type="regexp" from="^(.*)/([^/]+\.(css|js))$" to="\1/min/\2"/> 
1 楼 goldenlove 2010-09-21  
问下... Mapper里我如果不想实现文件改名为 *-min.js , 而是想实现到 /min/ 目录下呢?
为了保持文件名不变,我试过用 <identitymapper/> ,但是没有任何效果...不知为啥?

相关推荐

    Antdesign Axure前端设计资源包

    Ant Design是一套优秀的前端UI解决方案,由阿里巴巴集团开发,它以"移动优先"为设计理念,注重用户体验,提供了丰富的组件库和统一的设计规范,使得开发者能够快速构建出美观且易用的Web应用界面。 在Axure中使用...

    前端开源库-ant

    "ant"在这里指的是知名的前端框架Ant Design,它是一个基于React的UI设计语言,为开发者构建高质量的Web应用提供了一整套解决方案。 Ant Design的设计理念源于中国传统家具的工艺美学,它的核心思想是“清晰、简洁...

    ruoyi-cloud前端工程,使用ant design vue框架.zip

    Ruoyi-Cloud是一款基于Ant Design Vue框架构建的前端工程,它为开发高效、美观的企业级Web应用提供了全面的解决方案。这个压缩包“ruoyi-cloud前端工程,使用ant design vue框架.zip”包含了名为“ruoyi-ant-master...

    基于Go-Zero + Ant Design Pro的前后端分离微服务管理系统的前端模

    总的来说,结合Go-Zero的微服务框架和Ant Design Pro的前端库,我们可以构建出一套高效、可扩展的微服务管理系统前端,它不仅能提供流畅的用户体验,还能适应复杂的企业级需求。通过合理的前后端分离,我们可以更好...

    AntDesign学习手册

    这些企业和组织使用Ant Design构建了多种Web应用,提高了用户体验和开发效率。 Ant Design是一款功能强大且灵活的前端UI组件库,可以帮助开发者快速开发Web前端应用。通过本学习手册,开发者可以快速掌握Ant Design...

    AntDesign3.9Axure组件

    在实际使用中,AntDesign3.9Axure组件的文件名为"AntDesign3.9.x_Axure_20180903.rplib",这个.RPILB文件是Axure的库文件格式,可以直接导入到Axure RP软件中使用。只需简单几步操作,即可将这个资源库添加到个人的...

    Ant Design前端框架 v3.6.20.zip

    Ant Design,作为一个高度流行的前端框架,由阿里巴巴集团的蚂蚁金服团队研发,它为开发者提供了丰富的UI组件和优雅的设计模式,使得构建企业级Web应用变得更为简单高效。在Ant Design v3.6.20版本中,我们可以深入...

    antdesign浏览器引用

    AntDesign,全称为"Ant Design",是一款源自阿里巴巴的优秀前端UI框架,专门用于构建企业级的Web应用。它的设计理念是“移动优先”,注重简洁、高效、可扩展性,为开发者提供了一整套完整的组件库,使开发人员能够...

    前端项目-ant-design-pro.zip

    在React的基础上,Ant Design Pro引入了面向现代Web开发的模块化、响应式和可配置化原则,使得开发者可以快速构建出符合现代企业需求的高质量前端应用。 二、核心特性 1. **预设样式与布局**:Ant Design Pro提供...

    Jeepay支付系统对应的前端UI项目,使用Ant Design Vue开发 专业UI界面,简单整洁

    Ant Design Vue是蚂蚁金服推出的一套基于Vue.js的高质量UI解决方案,它提供了丰富的组件和设计模式,使得构建专业且界面简洁的应用变得更为便捷。 在Jeepay的前端项目中,主要包括以下几个部分: 1. 运营平台:这...

    AntDesignVue一个基于AntDesign和Vue的企业级UI组件库

    AntDesignVue是开发者们用于构建企业级前端界面的重要工具,它将阿里巴巴的Ant Design设计理念与Vue.js框架完美结合,提供了一系列高质量、易于使用的UI组件。这个强大的组件库旨在帮助开发者快速搭建美观且功能丰富...

    antDesignPro+golang(gin)+bearPi.zip

    项目主要由三个部分组成:前端使用了Ant Design Pro,后端采用了Golang的gin框架,而下位机则选择了BearPi。下面将详细阐述这三个关键组成部分及其相关知识点。 首先,Ant Design Pro是基于React的UI组件库,专门...

    Ant Design Vue 是使用 Vue 实现的遵循 Ant Design 设计规范的高质量 UI 组件库

    综合资源方面,Ant Design Vue 通常与其他前端工具如 Vue Router、Vuex 等配合使用,构建完整的前端应用架构。开发者还可以通过 NPM 或 Yarn 安装并引入该库,利用 Vue CLI 创建项目时,也可以通过预设或插件方式...

    Vue版AntDesignPro基于Elementui实现

    Element-ui提供了丰富的组件集合,包括表格、按钮、提示、通知、对话框、布局、表单组件等,这些都是构建前端应用的基础模块。其设计风格简洁明了,易于上手,并支持深色主题,适用于多种应用场景。 在Vue版Ant ...

    Ant Design 风格 移动端 分享版

    使用这种库文件,设计人员可以快速构建出符合Ant Design风格的移动界面,大大提升了设计效率。 总结来说,Ant Design风格移动端分享版是移动产品设计领域的一个强大工具,它以简洁、高效的Ant Design为基础,结合...

    基于AntDesignofVue实现的AntDesignPro

    在前端开发领域,Ant Design Pro 是一款强大的企业级前端框架,它基于流行的 Vue.js 框架构建,旨在提供快速、高效的企业级应用解决方案。本篇文章将深入探讨 Ant Design of Vue 与 Ant Design Pro 的核心概念、主要...

    Ant Design Library 3.0 一套精美得像视觉稿的 Axure 组件库

    Ant Design,源于阿里巴巴的前端设计框架,以其“简洁、直观、强大”的特点深受业界喜爱。这一设计理念也被完美地融入到这个Axure组件库中。3.0版本更是对前一版进行了全面升级,无论是在组件的细节处理,还是在整体...

    基于 Ant Design of Vue 实现的 Ant Design Pro

    Ant Design Pro of Vue 是一个基于 Vue.js 框架并结合了 Ant Design 组件库的高级前端开发框架,专门用于构建企业级的Web应用程序。它提供了丰富的预设UI组件和模板,大大简化了开发过程,使得开发者能够快速搭建出...

    一款基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台

    本文将详细解析一款基于最新前端技术栈Vue3 + Vite + Ant Design Vue(Antdv)以及后端Spring Boot实现的低代码开发平台。这个项目利用了当前业界最流行的技术组合,旨在提供高效、灵活的软件开发解决方案。 首先,...

    ant-design-pro-master

    "ant-design-pro-master" 是一个基于Ant Design Pro的开源项目,它是蚂蚁金服推出的一套企业级前端解决方案的源代码仓库。这个项目主要用于学习和理解如何有效地构建专业级的Web应用,尤其是对于那些想要深入了解Ant...

Global site tag (gtag.js) - Google Analytics