Создание сенсорных приложений Sencha с помощью JSBuilder или Apache ANT - PullRequest
0 голосов
/ 05 августа 2011

Предположим, что вы создали (закодировали) свое приложение MVC Sencha Touch с кучей видов, контроллеров, моделей, хранилищ, утилит и т. Д. *

Какой лучший способ "создать" приложение для производстваиспользовать?

Задачи будут:

  • Конкат и минимизация всех исходных файлов JS
  • Конкат и минимизация таблиц стилей (в основном работает Compass с производственной средой)
  • Удалите ненужные папки

Кто-нибудь уже делал это с JSBuilder или Apache Ant?Я считаю, что решение JSBuilder, интегрированное с библиотекой Sencha Touch, довольно глючное и недокументированное.Apache Ant идеально подходит для "больших" сборочных или CI-систем, таких как Jenkins, но я упускаю хороший пример того, как этого добиться с помощью приложения Sencha Touch.

Так что вопрос в том, как создать скрипт сборки.для сенча тач похожи?

1 Ответ

2 голосов
/ 06 августа 2011

РЕДАКТИРОВАТЬ: Предупреждение: это старый ответ, сегодня могут быть лучшие способы сделать это.Современные инструменты сборки для javascript прошли долгий путь с 2011 года.

Я на самом деле сделал именно это сегодня.

Сначала я подумал об использовании sprockster, так как мне нравился стиль определения сценариев c / c ++ includeзависимости.

В итоге я использовал Apache ant, потому что некоторые из членов моей команды несколько боялись рубина.Apache ant также выглядел как более универсальный и хорошо документированный инструмент.

Я пока не понял, как автоматически создавать файлы sass, но это не должно быть слишком сложно.

Процесс, который я использую, довольно прост:

  1. объединяет все файлы js и помещает их в папку сборки.
  2. минимизирует все файлы js в папке сборки и переименовывает их * -min.js
  3. скопировать все необходимые файлы в папку dist (включая изображения, sencha-touch.js, индексный файл и т. д.)

Вот что я закончил:

<project name="ProjectApp" default="dist" basedir=".">
    <description>
        Project Manager build file
        dist-debug is the target that's best for debugging
        Run ant dist-debug to build the project
    </description>
    <!-- set global properties for this build -->
    <property name="src" location="src"/>
    <property name="lib" location="lib"/>
    <property name="build" location="build"/>
    <property name="dist"  location="dist"/>
    <property name="utils"  location="utils"/>
    <property name="img"  location="img"/>

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

    <target name="concatenate" depends="init" description="Concatenate all js files">
        <concat destfile="${build}/application.js" fixlastline="yes">
            <fileset file="${src}/js/app.js" />
            <fileset file="${src}/js/observablize.js" />
            <fileset file="${src}/js/config.js" />

            <!-- Models -->
            <fileset file="${src}/js/models/Project.js" />
            <fileset file="${src}/js/models/ProjectInformation.js" />
            <fileset file="${src}/js/models/Picture.js" />
            <fileset file="${src}/js/models/Milestone.js" />
            <fileset file="${src}/js/models/Risk.js" />
            <fileset file="${src}/js/models/data.js" />
            <fileset file="${src}/js/models/Invoice.js" />
            <fileset file="${src}/js/models/Customer.js" />
            <fileset file="${src}/js/models/OpenItem.js" />
            <fileset file="${src}/js/models/favorites.js" />
            <fileset file="${src}/js/models/mockObjects.js" />

            <!-- Database -->
            <fileset file="${src}/js/database/createTables.js" />
            <fileset file="${src}/js/database/database.js" />
            <fileset file="${src}/js/database/projectObserver.js" />

            <!-- Network -->
            <fileset file="${src}/js/network/network.js" />
            <fileset file="${src}/js/network/queries.js" />
            <fileset file="${src}/js/network/parseProjectServiceProject.js" />
            <fileset file="${src}/js/network/parseQueryEngineProjects.js" />
            <fileset file="${src}/js/network/parseDocArchiveSearchResponse.js" />
            <fileset file="${src}/js/network/parseDocArchiveDataResponse.js" />
            <fileset file="${src}/js/network/parseQueryEngineInvoices.js" />
            <fileset file="${src}/js/network/parseQueryEngineCustomer.js" />

            <!-- Views -->
            <fileset file="${src}/js/views/Viewport.js" />
            <fileset file="${src}/js/views/XTemplates.js" />
            <fileset file="${src}/js/views/Login.js" />
            <fileset file="${src}/js/views/ProjectList/ActionSheet.js" />
            <fileset file="${src}/js/views/ProjectList/ProjectView.js" />
            <fileset file="${src}/js/views/ProjectList/ProjectList.js" />
            <fileset file="${src}/js/views/ProjectList/ProjectsLists.js" />
            <fileset file="${src}/js/views/ProjectInfo.js" />
            <fileset file="${src}/js/views/ProjectRisks.js" />
            <fileset file="${src}/js/views/ProjectMilestones.js" />
            <fileset file="${src}/js/views/ProjectDetail.js" />
            <fileset file="${src}/js/views/Overlays.js" />

            <!-- Controllers -->
            <fileset file="${src}/js/controllers/login.js" />
            <fileset file="${src}/js/controllers/projects.js" />
        </concat>
    </target>

    <target name="compress" depends="concatenate" description="Compress application.js to application-min.js">
        <apply executable="java" parallel="false">
            <filelist dir="${build}" files="application.js" />
            <arg line="-jar" />
            <arg path="${utils}/yuicompressor-2.4.6.jar" />
            <srcfile />
            <arg line="-o" />
            <mapper type="glob" from="*.js" to="${build}/*-min.js" />
            <targetfile />
        </apply>
    </target>

    <target name="dist-debug" depends="concatenate" description="generate the distribution">
        <!-- Create the distribution directory -->
        <mkdir dir="${dist}"/>

        <!-- copy over the required files -->

        <!-- required libraries -->
        <!-- sencha touch -->
        <copy file="${lib}/sencha-touch/sencha-touch.js" todir="${dist}"/>

        <!-- stylesheet -->
        <copy file="${build}/application.css" todir="${dist}"/> 

        <!-- index file -->
        <copy file="${src}/index.html" todir="${dist}"/>

        <!-- manifest file -->
        <copy file="${src}/cache.manifest" todir="${dist}"/>

        <!-- app javascript -->
        <copy file="${build}/application.js" tofile="${dist}/application.js"/>

        <!-- images -->
        <copy file="${img}/icon.png" todir="${dist}"/>
        <copy file="${img}/startup.png" todir="${dist}"/>
        <copy file="${img}/disclosure.png" todir="${dist}"/>

    </target>

    <target name="dist" depends="dist-debug,compress" description="generate minified distribution"> 
        <!-- app javascript -->
        <copy file="${build}/application-min.js" tofile="${dist}/application.js"/>  
    </target>   

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

</project>

Как видите, я указываю каждый файл в моем проекте.Это просто, чтобы правильно оформить заказ.Если ваш код написан лучше моего и не имеет каких-либо зависимостей, вы можете просто включить всю исходную папку.

...