JavaScript 组件之旅(三):用 Ant 构建组件

听起来是不是很惬意?Let's go! 我们出发啦~

这期,我们会使用 Ant 将上期编写、整理的代码文件按指定的先后顺序合并成单一的源文件,然后压缩这个文件。这是构建 JavaScript 项目的基本步骤。Ant 是 Apache 的一个顶级开源项目,网上对它的介绍和安装,已经有很多文章,这里就不再赘述了。在构建之前,我们先来看看已有的文件布局:

 smart-queue // 组件的根目录
+--- src // JavaScript源文件目录
+--- lang.js // 前文提到的“外部文件”
+--- smart-queue.js // Smart Queue 主文件

现在,我们要让它“丰满”起来:

  • 组件根目录下添加:
    • README: 介绍 Smart Queue 组件
    • LICENSE: 组件的授权信息
    • build.xml: Ant 使用的配置文件

  • 组件根目录下添加 lib 子目录:存放构建过程中需要使用的外部程序和库文件
    • lib 子目录下添加 yuicompressor.jar: 我们用 YUI Compressor 压缩 JavaScript

  • 组件根目录下添加 test 子目录:存放测试组件所需的文件(下期介绍)
  • src 目录下添加 intro.js: 介绍组件的版本及说明信息

麻雀虽小,五脏俱全。现在 Smart Queue 看上去像是比较专业的 JavaScript 项目了:

 smart-queue // 组件的根目录
+--- lib // JavaScript外部程序和库文件目录
+--- yuicompressor.jar // YUI Compressor
+--- test // 测试文件目录
+--- src // JavaScript源文件目录
+--- intro.js // 介绍和版本信息
+--- lang.js // 前文提到的“外部文件”
+--- smart-queue.js // Smart Queue 主文件
+--- README // 组件自述文件
+--- LICENSE // 组件授权信息

我们计划将构建出来的文件存放到组件根目录下的 build 子目录,还要通过构建工具创建并销毁它。首次尝试构建前,建议先大概了解一下 Ant 的配置文件——build.xml 的结构:

<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>

<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>

<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>

<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>


仔细观察一下,除了 name, description 这些名字都很容易理解外,其他可以看到的规律包括:

  • project 元素的 default 属性值对应某个 target 元素的 name 属性;
  • target 元素的 depends 属性值对应其他某些 target 元素的 name 属性;
  • ${somename} 可以引用 property 中定义的值。

下面我们开始写自己的 build.xml.

首先,配置项目的基本信息,以及相关目录名称,将要使用的编码等等:

<project name="Smart Queue" default="compress" basedir=".">
<description>Build file for Ant</description>
<property name="src" location="src" />
<property name="build" location="build" />
<property name="lib" location="lib"/>
<property name="inputencoding" value="utf-8"/>
<property name="outputencoding" value="gbk"/>

接着,定义一个用于初始化的 target, 它负责创建 build 子目录:

  <target name="init">
<mkdir dir="${build}"/>
</target>

然后定义名为 concattarget, 负责将 src 里的 3 个 JavaScript 文件按先后顺序连接起来。运行它要先运行前面定义的 init:

  <target name="concat" depends="init">
<concat destfile="${build}/smart-queue.source.js" encoding="${inputencoding}" outputencoding="${outputencoding}">
<filelist dir="${src}" files="intro.js, lang.js, smart-queue.js" />
</concat>
</target>

这样,就可以得到一个可以工作的 JavaScript 文件,下面的 target 负责压缩这个文件,显然它依赖于 concat, 也依赖于 init, 但是不必显式指定对 init 的依赖——Ant 能处理这种依赖关系。这里调用 YUI Compressor 并传入适当的参数:

  <target name="compress" depends="concat">
<java jar="${lib}/yuicompressor.jar" fork="true">
<arg line="--type js --charset utf-8 -o ${build}/smart-queue.js ${build}/smart-queue.js"/>
</java>
</target>

大功告成,compress 处理后的文件就可以部署到生产系统上去了。最后我们做一下清理工作,使你在生成文件后还可以回到最初的状态:

  <target name="clean">
<delete dir="${build}"/>
</target>

到此可以说基本的配置就写完了。怎么使用它呢?以命令行方式进入到组件根目录(或者说 build.xml 所在的目录),然后:

  • 运行 ant concat, 将得到 ./build/smart-queue.source.js
  • 运行 ant, 将选择 <project>default 引用的那个 target, 即 compress, 所以会得到 ./build 下的 smart-queue.source.js 和 smart-queue.js
  • 运行 ant clean, 将删除 ./build 目录,回到最初的状态

这些前提是你已经正确安装或者说设置好了 JDK 和 Ant, 如果有错误提示出来,则可能需要检查它们是否已准备妥当。

一路看下来,是不是觉得本期介绍的东西很简单?那是当然了,构建工具就应该简单易用,否则把大量的时间花在那上面岂非不值?工具的价值在于提升生产力,从而创造更多价值。

最后,你可以在这里查看 Ant 的帮助文档(里面有很多好玩的东东哦),也可以在这里查看本期完整的 build.xml 文件。

(0)

相关推荐

  • java ant 配置及构建项目图文教程

    Ant是一种基于Java的构建工具.Ant文件是配置构建目标过程的XML文件,也称为Ant脚本.(因为对这个不是很了解,所以用词方面可能于个人的理解有偏差,谢谢指出) 如何配置Ant工具呢?下面分步骤说明:1.  下载一个java ant 开发工具,解压到相应的磁盘    例如版本:apache-ant-1.8.2-bin.tar.zip:已上传资源 2. 打开命令行,开始--- 运行----cmd --回车,然后输入ant,它会有提示说这个不是内部文件的字样.这时候用到第三部配置环境 3. 右

  • JavaScript 组件之旅(三):用 Ant 构建组件

    听起来是不是很惬意?Let's go! 我们出发啦- 这期,我们会使用 Ant 将上期编写.整理的代码文件按指定的先后顺序合并成单一的源文件,然后压缩这个文件.这是构建 JavaScript 项目的基本步骤.Ant 是 Apache 的一个顶级开源项目,网上对它的介绍和安装,已经有很多文章,这里就不再赘述了.在构建之前,我们先来看看已有的文件布局: smart-queue // 组件的根目录 +--- src // JavaScript源文件目录 +--- lang.js // 前文提到的"外部

  • JavaScript 组件之旅(一)分析和设计

    另一方面,由于 JavaScript 通常会和宿主环境(比如浏览器)紧密结合,因此缺乏功能强大而简单易用的开发工具.在这样的环境中,开发组件或框架成为一项具有挑战的工作.这次,我们将以一个简易的 JavaScript 组件开发为契机,逐步展开组件的分析.设计.实现.构建和测试等任务,探讨组件开发过程涉及的方方面面.这些探讨将分 4 篇陆续张贴出来(链接将在张贴后更新): 分析和设计组件 编码实现和算法 用 Ant 构建组件 测试 JavaScript 组件 现在,假设我们要从头开始设计并实现一个

  • JavaScript 组件之旅(二)编码实现和算法

    首先,我们要考虑一下它的源文件布局,也就是决定代码如何拆分到独立的文件中去.为什么要这么做呢?还记得上期结尾处我提到这个组件会使用"外部代码"吗?为了区分代码的用途,决定将代码至少分成两部分:外部代码文件和 Smart Queue 文件.区分用途只是其一,其二,分散到独立文件有利于代码的维护.试想,以后的某一天你决定要在现有的队列管理基本功能之上,添加一些新的扩展功能,或是把它包装成某个实现特定任务的组件,而又希望保持现有功能(内部实现)和调用方式(对外接口)不变,那么将新的代码写到单

  • javascript实现的淘宝旅行通用日历组件用法实例

    本文实例讲述了javascript实现的淘宝旅行通用日历组件用法.分享给大家供大家参考. 在线演示:http://demo.jb51.net/js/2015/trip-calendar/demo.html PS:下面的演示代码,需要用到 trip-calendar.js与trip-calendar.css文件.打包下载地址 具体如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8">

  • React构建组件的几种方式及区别

    目录 一.组件是什么 二.如何构建 函数式创建 通过 React.createClass 方法创建 继承 React.Component 创建 三.区别 一.组件是什么 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式 在React中,一个类.一个函数都可以视为一个组件 组件所存在的优势: 降低整个系统的耦合度,在保持接口不变的情况下,我们可以替换不同的组件快速完成需求,例如输入框,可以替换为日历.时间.范围等组件作具体的实现 调试方便,由于整个系统是通过组件组合起

  • Ant Design 组件库按钮实现示例详解

    目录 1 antd 之 Button API 2 antd 之 Button 示例 1 antd 之 Button API antd 组件库是基于 Ant Design 设计体系的 React UI 组件库,antd 为 Web 应用提供了丰富的基础 UI 组件,可以用于研发企业级中后台产品.这篇咱们介绍 antd 组件库之 按钮. 按钮 Button 是一个比较基础的 UI 组件,一般在有交互的应用中都会用到. 其 DOM 节点为 <Button>...</Button>,ant

  • 如何修改ant design组件自带样式

    目录 修改ant design组件自带样式 背景 需求 解决方法 Notice 更改antd 默认样式 更改ant design 默认样式 修改ant design组件自带样式 背景 Vue-CLI创建的项目 需求 把走马灯的面板指示点(如图1)改成真正的点(如图2) 解决方法 走马灯自带面板指示点类名dotsClass = "slick-dots",考虑到项目中可能多处会用到走马灯,请自行更改类名(我的项目只有一处用到,故不想改) 在src/assets/style/(这个是我用来放

  • javascript函数命名的三种方式及区别介绍

    javascript函数命名的三种方式及区别介绍 第一 复制代码 代码如下: function fn(val1,val2) { alert(val1+val2); } fn(1,2); 第二 复制代码 代码如下: var fn=function() { alert(val1+val2); } fn(1,2); 第三 复制代码 代码如下: var fn=new Function("alert(val1+val2)"); fn(1,2); 上面三种方式逻辑上是等价的,但是还是有点小区别:区

  • JavaScript事件处理的方式(三种)

    最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,特此分享到我们平台供大家参考下! 一.什么是JavaScript事件? 事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水,当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了. 事件可能是用户在某些内容上的点击.鼠标经过某个特定元素或按下键盘上的某些按键,事件还可能是Web浏览器中发生的事情,比如说某个Web页面

  • JavaScript定义数组的三种方法(new Array(),new Array('x','y')

    如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

随机推荐