Bruke Myr til å bygge et JavaScript-bibliotek

Programmer ser alle ut til å ha et versjonsnummer, ikke sant? Hvor som helst du ser etter råd om å administrere et stort programvareprosjekt, vil du oppdage at en automatisert byggeprosess er praktisk talt et krav. Jeg har funnet det viktig å automatisere en byggprosess som sammenkorter og minifiserer filene som trengs for en gitt side. Denne opplæringen vil de-mystify Ant-byggeverktøyet og vise deg hvordan du lager dine egne, fleksible, bygge filer til et JavaScript-bibliotek.


Programvarekrav

For denne opplæringen trenger du NetBeans med Ant installert. Jeg bruker ofte:

  • NetBeans 7.0.1 for PHP-prosjekter - Ant versjon 1.12.1
  • NetBeans 7.1 for JSP-prosjekter - Ant versjon 1.14.1

Myrverktøyet i PHP-versjonen er en litt begrenset versjon, men er ideell for vårt formål, fordi PHP-prosjekter ikke er kompliserte med en automatisk generert byggfil. Så for denne opplæringen vil jeg demonstrere med PHP-versjonen. Imidlertid er Ant selvfølgelig tilgjengelig på Apache og er mye brukt i IDEer, som Eclipse. For .Net C # fellesskapet, er det et verktøy som heter Nant, som jeg bruker i .NET prosjekter - det er ganske like.


Begrunnelse: Hvorfor Bygg?

I mitt første alvorlige forsøk på å skape et Ajax-applikasjon på en side, endte jeg med en liste med nesten 40 skriptkoder som ga oppstartstid på over et minutt. For å gjøre prosjektet overskuelig, trengte jeg å inneholde koden i flere moduler, for ikke å nevne alle de YUI-modulene som var påkrevd. Etter å ha lest blogger skrevet av YUI-teamet, skjønte jeg hvor viktig det er for ytelse å redusere antall skriptkoder til så lite et nummer som mulig. Derfor er jeg interessert i å sammenkoble og minifisere JavaScript-filer.

Kombinere flere filer reduserer ekstra bytes fra HTTP-hoder, samt potensiell overføringsforsinkelse forårsaket av TCP-treg start, pakketap osv..
YUI Blog: Performance Research, Del 6

Hvorfor Ant?

Lajos Moczar utmerkede Tomcat 5 Unleashed hadde stor innflytelse på min holdning til å utvikle en komplett web-basert applikasjon. Det er mye mer enn en bok om Tomcat. Det ga meg motivasjon, veiledning og mot til å begynne å bruke Ant for å bygge mine JSP-prosjekter. Myr er bygd inn i NetBeans, min favoritt IDE for JSP, og jeg ble vant til å bruke den automatisk genererte byggefilen med lite behov for manuell redigering når du bygger en Java-pakke med klasser. Men da min forståelse av JavaScript vokste, fant jeg ut at jeg trengte en byggeprosess og ble tvunget til å skrive mine egne byggkonfigurasjonsfiler manuelt bare for JavaScript-delen av prosjektet. Moczar's build.xml for en Tomcat-applikasjon ga meg et godt utgangspunkt.

Å ha et godt utviklingsmiljø er helt kritisk til suksess for din utviklingsarbeid. Du trenger et strukturert miljø som gjør at du kan utføre byggeprosessene på en effektiv og repeterbar måte.
- Lajos Moczar, Tomcat 5 Unleashed

Redaktørens merknad: Hvis du bestemmer deg for å bruke Ant, er Grunt et fantastisk byggverktøy for JavaScript-applikasjoner. Lær mer om det her på Nettuts+.


Trinn 1: Sette opp miljøet ditt

Åpne et nytt prosjekt i NetBeans. Jeg har kalt min NetTutsBuildJs, og har laget den inne i min Nettuts + -mappe her: C: \ NetTuts \ BuildJs. Selvfølgelig trenger JavaScript ikke å bli kompilert til en exe fil; vi har forskjellige bekymringer. Det er minst tre ting vi trenger for et stort JavaScript-prosjekt:

  • Utvikle Kilde: Lag en masse moduler i separate filer. Dette er vår kildekode.
  • sette sammen: Samle alle kildefilene du trenger for en bestemt side og sammenkoble dem til en fil.
  • Minify: Minifiser filer ved hjelp av et godt kjent minifiseringsverktøy for å gjøre dem så små som mulig. Jeg foretrekker YUI Compressor-verktøyet.

Som du kan se i skjermbildet, har jeg opprettet en mappe som heter js for min JavaScript, og deretter lagt til mappene, src, concat og min.


Trinn 2: Ignorer verden

Jeg er litt lei av å si "Hello World" i begynnelsen av hver ny IT-opplæring, ikke sant? Så jeg trodde det ville vært fint å ignorere verden denne gangen. Tross alt kan det være bare en fantasi av fantasien min!

Jeg er solipsist. Hvorfor er det ikke flere av oss?

  • Høyreklikk på kontekstmenyen i kildefiler-mappen og legg til et nytt XML-dokument, kalt build.xml.
  • Fjern all den automatiske malteksten og skriv inn denne teksten:
  

Du kan ikke legge merke til noe nå, men hvis du starter på nytt, vil du se det build.xml Nå har et spesielt ikon med en gul trekant forbundet med Ant-filer. Hvis du velger den, vil du se navigatørpanelet nå viser Ant-mål i overskriften.

Hvert sett med oppgaver i en Ant-byggefil kalles et mål, så vi må opprette et enkelt meldingsmål
nestet inne i prosjektet, slik:

   

Nå, utvide build.xml filen i Prosjektpanelet, og du vil se det nye målet i Navigator-panelet. Høyreklikk på ignorere-verdensmelding, og du bør se meldingen i Utdata-panelet, slik som dette:


Trinn 3: Sorter ut baner

Ikke sant. Verden kan ikke eksistere, og vi har ignorert det, men i det minste ser Ant ut til å fungere! Skrekk fra hverandre, vi må nå få mest avgjørende ting i Ant rett: stier.

Jeg kan være litt treg, men jeg har alltid hatt problemer med dette, så la oss tread forsiktig. Legg til en egenskap øverst på filen, like under prosjektet. Ring eiendommen rot og sett plasseringen til en nulllengdesnor.

 

Legg til et nytt mål for å vise denne plasseringen, slik at vi kan sikre at vi har stiene rett. Legg merke til den konvolutte syntaksen for å referere til rotegenskapen? Du må legge inn eiendomsnavnet inne i dobbeltsedler, men i tillegg må du pakke det med et dollarskilt og en krøllete stav til venstre, og lukk den med en krøllet stav til høyre. Hva en oppstyr!

   

Du kan sette det etter ignorert verdensmål. Nå når du høyreklikker på vis-rot-bane mål for å vise kontekstmenyen og deretter klikke "Kjør mål", bør du se den riktige banen til roten til prosjektet ditt. I mitt tilfelle: C: \ NetTuts \ BuildJs.


Trinn 4: Legg til andre baner

Herlig. Vi har vårt miljø og vi har en rutebane som peker til riktig sted på harddisken vår. Nå kan vi legge til de andre banene.

    

Trinn 5: Sammenkoble filene

Til slutt, noen virkelige arbeid. Vi legger til et nytt mål, som inkluderer en concat tag, slik:

      

Dette er bare et trivielt eksempel, men for raskhet slik at du kan følge med, har jeg opprettet to enkle JavaScript-filer: tree_data.js og tree.js, som er avhengig av YUI-filene, yahoo-dom-event.js og Utforsker-min.js. tree_data.js har følgende ganske meningsløse innhold:

 var treeData = ["label": "Britain", "children": ["London", "Edinburgh"], "label": "Frankrike", "barn": ["Paris", "Lyon"] , "label": "Japan", "barn": ["Tokyo", "Kyoto"], "label": "Thailand", "barn": ["Bangkok", "Pattaya"]]

Og tree.js gjør ganske enkelt a Tre utsikt med dataene.

 YAHOO.util.Event.onDOMReady (funksjon () var tree = nytt YAHOO.widget.TreeView ("tree", treeData); tree.render (););

Legg merke til at filelisten-taggen er akkurat det vi trenger her. I JavaScript er ordren viktig, så vi vil sannsynligvis dataene først og deretter gjengivelsesfilen andre. Hvis vi brukte en tagg som stod på den naturlige rekkefølgen på filene i operativsystemet, kan vi få dem i feil rekkefølge. Så skriver vi arbeidskrevende ut manuelt i listen Filelist tag for å sikre bestillingen vi ønsker.

For deg JavaScript-purister der ute: Jeg vet min treeData variabel er en global variabel, og jeg bør gjøre det på en annen måte. Dette er bare et raskt eksempel for å forklare hvordan du bruker Ant. Jeg er ganske sikker på at folk som følger opplæringen, også følger dagens beste praksis for deres JavaScript-bibliotek.

Kjør nå concat mål. Se og se, en fil som heter tre-concat.js vises magisk i concat katalog, og når du åpner den, kan du se dataene som er definert øverst og gjengivelsesfunksjonen nederst.

For å prøve dette, har jeg opprettet to enkle HTML-filer: tree_src.html og tree_concat.html. I toppteksten har de begge de samme koblingene til CSS-filene som trengs for å lage Sam-skinet for et TreeView.

   

Like før slutten av kroppen i tree_src.html, jeg har lagt til

    

For å teste den sammenkoblede filen. Jeg har endret manus tagger inn tree_concat.html til:

   

Trinn 6: Endelig trinn: Minifisering

Vårt trebibliotek ser ut til å fungere, og når vi slår sammen filene, ser vi ut til å ha fått riktig rekkefølge. Utmerket! Nå er det endelig tid til å redusere alt og redusere antall manus merker ned til en. Dette er litt mer komplisert.

                 

Legg merke til egenskapskompressoren. For å få dette til å løpe, kopierte jeg YUI kompressor jar fil til yui_compressor mappe i prosjektet mitt og opprettet en eiendom i byggfilen:

 

Når vi kjører min mål, bør du nå se denne utgangen og en ny fil, kalt tre-min.js i min mappe. Hvis du åpner den, ser du en lang kontinuerlig strøm av JavaScript uten hvitt plass, alt på en linje.

Det er bare ett mål som er nødvendig: sammenkoble de to YUI-filene med vår nye, minifiserte fil.

        

I testfilen, tree_min.html, Jeg trenger nå bare en manus stikkord:

 

Trinn 7: One-Click Build

Det endelige trinnet er å legge til et mål som kaller alle de nødvendige målene og kjører dem i riktig rekkefølge. Konvensjonen er å kalle dette målet, bygge. Det er også nyttig å ha a ren Målet er å slette concat og min kataloger og en i det Målet er å sette opp disse katalogene.

        

Byggemålet skal nå løpe:

  1. ren
  2. i det
  3. concat
  4. min
  5. alle

Måten å kombinere alle disse er å bare legge dem til avhengighetsattributtet, slik som dette.

  

Konklusjon

Vi gikk gjennom trinnene som kreves for å opprette en konfigurasjonsfil for Ant for å bygge et JavaScript-bibliotek.

I denne veiledningen gikk vi gjennom trinnene som kreves for å opprette en konfigurasjonsfil for Ant for å bygge et JavaScript-bibliotek. Fra kildekoden sluttet vi alle filene i biblioteket til en fil, og sørget for at hver av kildefilene ble lagt til i riktig rekkefølge. Vi testet den resulterende sammenkoblede filen for å sikre at ingenting manglet eller var ute av sted. Vi minifiserte den filen og konkluderte den med YUI-filene den avhengige av.

Det endelige resultatet var at vi hadde en nettside med bare en manus tag, som inneholder alt komplekst JavaScript som trengs for å kjøre siden. Jeg tror du kan se hvor enkelt det ville være å tilpasse dette eksemplet til et veldig stort komplekst JavaScript-bibliotek. Med dette grunnleggende eksemplet som utgangspunkt bør du kunne utforske Ant-dokumentasjonen og utvikle en fullt fungerende byggfil for å automatisere alle deler av byggeprosessen din.

Jeg bruker også Ant for SQL for å bygge den lokale klonen i databasen min.

I tillegg bruker jeg denne typen bygge for CSS-filer også. De kan bli nesten like innviklede som JavaScript-filene, og det hjelper virkelig å sammenkoble og redusere dem også. Jeg bruker også Ant for SQL for å bygge den lokale klonen i databasen min. Jeg finner at når jeg vil starte på nytt med et prosjekt, rydder ut all eksperimentell kode og starter fra bunnen av, er det veldig nyttig å ta med en fin fersk ny database. Myrverktøyet gjør det enkelt å raskt bygge tabellene, funksjonene og prosedyrene, og deretter fylle saken med noen prøvedata.