zoukankan      html  css  js  c++  java
  • 前端代码的开发及其部署(Ant && YUI Compressor)

    想了老半天不知道说什么“闲话”是好,不如直接切入正题吧,下面的内容就当是最近开发学习的一个总结:来说说前端代码的开发及其部署。

    部署工具:1,Ant;2,YUI Compressor;都是开源的小东东,但是的确很强也很大!直接猛击链接传送至官网。

    这里我是用的是 Apache Ant 1.8.2YUI Compressor 2.4.6;(测试环境是Windows)。

    ---

    为了“逼真”地说明问题,所以模拟一个开发环境及其文件结构如下:

    image

    DepoymentTest 文件夹作为项目的根目录,build 中是项目的部署工具,build_output 是部署(压缩及其合并)之后可以上线的代码,web 则是整个项目的前端源代码:

    image

    初始的 build_output 文件夹是空的,因为我们还没有部署代码,/web/asset 作为真正的线上源码,/web/src 则作为开发代码(最初的源代码,人可读),main.html 是项目的主页面:

    先来学习下整个项目的主页面代码(main.html):

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>Deployment Test</title>
    		<link rel="stylesheet" type="text/css" href="./asset/css/all.css" />
    	</head>
    
    	<body>
    		<div id="MainContent">
    			<!--页面内容-->
    		</div>
    		<script type="text/javascript" src="./asset/js/all.js"></script>
    	</body>
    </html>

    可见,整个页面只包含了一个 all.css 样式文件和一个 all.js 文件,stylesheet 文件在常规位置,而 javascript 文件则放到了 </body> 结束标签的上方,这样做有利于页面的响应速度,如果放到 stylesheet 文件的下面(常规思路),由于 javascript 文件是一个由许多 js 文件压缩而成的总文件,在浏览器渲染整个页面之前,需要加载并执行完整个 js 文件,可能会引起页面加载时的短暂空白,降低用户体验,而上面的方式则是一种可以防止这种情况的方法,而且不用担心 DOM 还未加载完就执行 js 的问题等等。

    asset 及其 src 仍旧是常见的文件部署结构:

    image

    main.html 包含了 ./asset/css/all.css 及其 ./asset/js/all.js,这样做的话,我们就不需要一直修改 main.html 文件了,因为实际上,上线以后的 main.html 仍旧引用的是这两个路径的文件,只不过内容被替换掉了而已。

    关于 js:在开发阶段,我们可以使用 document.write 语句来引入其余的 js 文件;

    关于 css :在开发阶段,同样使用 css 的 @import 语句来引入其余的 css 文件;

    如下测试源代码:

    ./asset/css/all.css :

    /*
     * DeploymentTestCSSFile
     */
    
    /*Base*/
    @import '../../src/css/jquery.ui.core.css';
    
    /*UI*/
    @import '../../src/css/jquery.ui.button.css';
    @import '../../src/css/jquery.ui.dialog.css';
    @import '../../src/css/jquery.ui.accordion.css';
    @import '../../src/css/jquery.ui.autocomplete.css';

    包含了我们需要的 css 文件。

    ./asset/js/all.js :

    /*
     * DeploymentTestJSFile
     */
    
    /*Base*/
    document.write('<script type="text/javascript" src="src/js/jquery-1.5.1.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.core.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.widget.js"></script>');
    
    /*UI*/
    document.write('<script type="text/javascript" src="src/js/jquery.ui.draggable.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.droppable.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.button.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.dialog.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.accordion.js"></script>');
    document.write('<script type="text/javascript" src="src/js/jquery.ui.autocomplete.js"></script>');

    包含了我们需要的 js 文件。

    小说明:这里的 css 文件及其 js 文件只当为测试用,并没有实际的意义,但是要注意,js 的引入顺序有一定的依赖性,例如:jquery.ui.core.js 依赖于 jquery-1.5.1.js,这种依赖性关联着后面的压缩顺序,后面有详细的解释。

    这个测试中的 css,js,以及图片都是测试用,如下截图:

    image

    注:测试图片直接放入了 asset 文件夹中。

    在本地服务器中打开测试页面,通过调试工具可以清楚地看到各个文件的加载,这是我们预料到的事情,因为现在还没有部署,我们需要用压缩后的 all.css && all.js 文件来代替现有的 all.css && all.js 文件:

    image

    ---

    部署的开始:在部署开始前,最好将开发时的 all.css && all.js 改名成 all.css.debug && all.js.debug,否则部署时会被覆盖掉:

    image

    部署工具:

    image

    首先需要配置出 Ant 的 build.xml 文件(具体的 Ant 教程可以在官网看到):

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project default="compress" basedir="E:\newPhpEnvironment\Webroot\deploymentTest\web" name="core">
    	<!-- 项目的 web 路径 -->
    	<property name="path" value="E:\newPhpEnvironment\Webroot\deploymentTest\web" />
    	<!-- 部署的输出路径 -->
    	<property name="targetDir" value="E:\newPhpEnvironment\Webroot\deploymentTest\build_output\asset" />
    	<!-- 源文件路径(src) -->
    	<property name="code.src" value="src" />
    	<property name="baseService" value="baseService" />
    	<!-- !!! YUI Compressor 路径 !!! -->
    	<property name="yuicompressor" value="E:\newPhpEnvironment\Webroot\deploymentTest\build\yuicompressor-2.4.6\build\yuicompressor-2.4.6.jar" />
    		
    		<!-- ================================= 
              target: concat 拼接(合并)文件        
             ================================= -->
    		 
    	<target name="concat" depends="" description="concat code">
    		<echo message="Concat Code Files Begin!!!" />
    		<!-- 需要注意这里的拼接顺序 --><!-- JS -->
    		<concat destfile="${targetDir}/js/source/all.js" encoding="utf-8" fixlastline="on">
    			<fileset dir="${code.src}/js" includes="jquery-1.5.1.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.core.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.widget.js" />
    			
    			<fileset dir="${code.src}/js" includes="jquery.ui.draggable.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.droppable.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.button.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.dialog.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.accordion.js" />
    			<fileset dir="${code.src}/js" includes="jquery.ui.autocomplete.js" />
    		</concat>
    		<!-- CSS -->
    		<concat destfile="${targetDir}/css/source/all.css" encoding="utf-8">
    			<fileset dir="${code.src}/css" includes="jquery.ui.core.css" />
    			
    			<fileset dir="${code.src}/css" includes="jquery.ui.button.css" />
    			<fileset dir="${code.src}/css" includes="jquery.ui.dialog.css" />
    			<fileset dir="${code.src}/css" includes="jquery.ui.accordion.css" />
    			<fileset dir="${code.src}/css" includes="jquery.ui.autocomplete.css" />
    		</concat>
    
    		<echo message="Concat Code Files Finished!!!" />
    	</target>
    
    	<!-- ================================= 
              target: copy 拷贝文件 
             ================================= -->
    
    	<target name="copy_asset" depends="concat" description="copy the asset file">
    		<echo message="Copy Asset Begin" />
    		<!-- main.html -->
    		<copy todir="${targetDir}/../" overwrite="true">
    			<fileset dir="${path}/" includes="*.html"/>
    		</copy>
    		<!-- img *.png -->
    		<copy todir="${targetDir}/img" overwrite="true">
    			<fileset dir="${path}/asset/img" includes="*.png" />
    		</copy>
    
    		<echo message="Copy Asset Finished" />
    	</target>
    
    
    	<!-- ================================= 
              target: compress 压缩 js && css  
             ================================= -->
    
    	<target name="compress" depends="copy_asset" description="compress code">
    		<echo message="Compress Code Begin" />
    
    		<apply executable="java" parallel="false" failonerror="true" dest="${targetDir}/js">
    			<fileset dir="${targetDir}/js/source" includes="*.js"/>
    			<arg line="-jar"/>
    			<arg path="${yuicompressor}" />
    			<arg line="--charset utf-8" />
    			<arg line="-o" />
    			<targetfile/>
    			<mapper type="glob" from="*.js" to="*.js" />
    		</apply>
    		
    		<apply executable="java" parallel="false" failonerror="true" dest="${targetDir}/css">
    			<fileset dir="${targetDir}/css/source" includes="*.css"/>
    			<arg line="-jar"/>
    			<arg path="${yuicompressor}" />
    			<arg line="--charset utf-8" />
    			<arg line="-o" />
    			<targetfile/>
    			<mapper type="glob" from="*.css" to="*.css" />
    		</apply>
    
    		<echo message="Compress Code Finished" />
    
    		<echo message="Clean Begin" />
    
    		<!--<delete verbose="false" failonerror="true">
                <fileset dir="${path}" includes="${targetDir}/*-o.js" />
            </delete> -->
    
    		<echo message="Clean Finished" />
    
    	</target>
    </project>

    配置文件中有相关的说明,更加详细的就需要看 Ant 的手册资料了:)

    Run Ant!!

    接下来如何让“蚂蚁”跑起来呢?可以写一个很简单的批处理文件:

    image

    build.bat :

    ./apache-ant-1.8.2/bin/ant -f ./build.xml

    其实就是调用了 ant.bat 文件,好啦!在小黑框中运行你的 build.bat 吧!

    image

    出险 BUILD SUCCESSFUL 的话,就说明没有问题了,去看看 build_output 文件夹:

    image

    出现了!!!!!只需要用 build_output/asset web/asset 覆盖掉就可以了,main.html 是拷贝过来的,可以不去管,覆盖掉之后:

    image

    all.css 和 all.js 就变成了压缩的代码,我们的项目应用,只需要一个 css 文件和一个 js 文件就 ok 啦!如下截图:

    image

    ---

    后期的开发,只需要将 all.css.debug && all.js.debug 改回成 all.css && all.js 文件就可以了,压缩文件可以删去,因为还可以再生成。

    好了,这就是这一段时间学到的东西,分享一下。:)



  • 相关阅读:
    [NOI2007]生成树计数
    [NOI2009]变换序列
    BZOJ3261 最大异或和
    [SHOI2011]双倍回文
    [TopCoder14647]HiddenRabbits
    [HDU5709]Claris Loves Painting
    [BZOJ4559][JLOI2016]成绩比较
    [CF995F]Cowmpany Cowmpensation
    [TopCoder11557]MatrixPower
    [UOJ198][CTSC2016]时空旅行
  • 原文地址:https://www.cnblogs.com/catprayer/p/2126719.html
Copyright © 2011-2022 走看看