Friksjonsløs AMD med Jam

Jeg liker virkelig asynkronmoduldefinisjon (AMD); Det er en flott løsning for å administrere de mange JavaScript-filene i et webprogram. Imidlertid finner jeg det å være litt av et problem, Noen av de mest populære bibliotekene er ikke AMD-klare som standard, så du må finne shimmed versjon. Deretter trenger du et ekstra bibliotek for den faktiske AMD-funksjonaliteten!

Jam løser alle disse problemene; som du ser, gjør det faktisk å bruke AMD enklere enn å ikke bruke det!


En av grunnene til at jeg elsker Jam så mye er at det er et kommandolinjeverktøy. Du trenger aldri å laste ned et bibliotek manuelt igjen! Selvfølgelig betyr dette at du må være komfortabel på kommandolinjen for at denne opplæringen skal være nyttig.

En ting til, før vi starter: Mens jeg forklarer litt om AMD i denne opplæringen, antar jeg at du forstår hva det er og hvorfor du vil bruke den. Hvis du er en Tuts + Premium-medlem, kan du sjekke ut disse opplæringene for å få deg raskere:

  • Essentials of AMD og RequireJS
  • Next Generation JavaScript med AMD og RequireJS

Installere den

Jam er en nodemodul, så antar du at du har Node og npm installert, bare kjør dette på kommandolinjen:

npm installere -g jamjs

Legg merke til at vi bruker -g flagg, slik at Jam er installert globalt. Dette skyldes at vi installerer et binært som vi kan bruke til flere prosjekter.

Når det har gått, bør du ha en syltetøy binær i din PATH (den er installert til / Usr / local / bin). Du kan se en liste over tilgjengelige Jam-kommandoer ved å kjøre syltetøy:

Så, la oss begynne å se på noen av disse kommandoene!


Laster ned pakker

Jeg har laget et eksempel prosjektkatalog og cd-reddet til den fra terminalen. La oss si at vi vil bruke jQuery i dette prosjektet. Det er ikke nødvendig å laste ned den nyeste versjonen eller lime inn en lenke til en CDN. Bare kjør dette på kommandolinjen:

jam installere jquery

Du bør se noen utgangslinjer, noe som betyr at jQuery er lastet ned. Hvis du sjekker ut prosjektkatalogen din, bør du se at flere filer er opprettet:

Jam skaper en syltetøy mappe for oss; Dette er hvor alle bibliotekene vi installerer med Jam, blir holdt. Legg merke til det er også hvor require.js filen holdes. Ja, det er KravJS-biblioteket som Jam bruker.

Så, å installere et bibliotek er så enkelt. Hva med å bruke den?


Bruke biblioteker

I prosjektkatalogen din (men utenfor det syltetøy mappe), opprett en fil som heter app.js. Dette vil være en egen modul, så vi må bruke definere funksjon (gitt til oss av KravJS). Hvis du har brukt AMD før, vet du at definere funksjonen tar to parametere: rekkefølge av avhengigheter og modulfunksjon, som returnerer modulobjektet. Modulnavnet er hentet fra filbanen og navnet.

Så, her er en veldig grunnleggende modul:

define (['jquery'], funksjon ($) return init: function () $ ("# main"). tekst ("Bruke Jam");;);

I avhengighetsarrangementet krever vi jQuery; vi trenger ikke å bruke en hel bane streng fordi require.js er konfigurert slik at bare ""Vil hente den riktige banen. Biblioteket vil da bli sendt til vår funksjon. Deretter returnerer vi i funksjonen en enkel gjenstand med en i det Metode som gjør litt jQuery magi.

La oss nå lage en index.html fil. Virkelig bare-bein:

Denne gangen bruker vi ikke definere funksjon, fordi vi ikke definerer en modul. Vi krever bare andre moduler til bruk, så vi bruker krever funksjon. Hvis du laster opp dette i nettleseren, bør du se at jQuery-koden i modulen blir utført.


Opprettholde ditt prosjekt

Før vi ser på en mer avansert bruk av Jam, la oss dekke noen få grunnleggende kommandoer.

Vi har nettopp installert jQuery 1.8.0. Men la oss si at jQuery 1.8.1 kommer ut; hvordan går du om å oppdatere prosjektet ditt? Kunne ikke være enklere:

jam oppgradering # eller jam oppgradering jquery

Hvis du har installert en pakke, og da finner du ikke trenger den, kan du enkelt fjerne den med syltetøy fjerne :

syltetøy fjerne jquery

Du kan se en liste over alle oppdaterte pakker ved å kjøre syltetøy ls.

Det er grunnleggende om å bruke Jam. La oss se på noen mer avanserte bruksområder.


Bruker Package.json Fil

Å bruke Jam i seg selv er flott, men det kan virkelig gjøre mer hvis du har en package.json fil. Hvis du har jobbet med Node mye, vil du nok være kjent med package.json filer: de brukes til å ta opp informasjon om moduler og katalogiseringsavhengigheter for apper.

La oss si at vi har en Express-app; For å få dette, installer Express med npm installer -g express og kjør deretter uttrykk myapp. Inne i MinApp mappe, standard package.json filen for en Express-app ser noe slik ut:

"navn": "søknadsnavn", "versjon": "0.0.1", "privat": sant, "skript": "start": "node app", "avhengigheter" : "3.0.0beta7", "jade": "*"

Jam har faktisk noen egenskaper som vi kan legge til i denne filen; Dette vil ikke bare gjøre det lettere å jobbe med Jam: det vil også gjøre det lettere for andre å raskt sette seg i prosjektet (kanskje etter kloning av Github). Vi starter med å legge til en syltetøy objektet bokstavelig som en rotseiendom:

// ... "jam": 

Den første nyttige egenskapen er "packageDir"; Som du vet, er dette en mappe som heter syltetøy som standard. I en Express-app, må klientens JS-filer imidlertid gå i en statisk katalog, vanligvis kalt offentlig. Så, la oss gjøre dette:

"jam": "packageDir": "public / lib"

Nå, alle bibliotekene (og require.js) vil være i lib mappe, i offentlig. Men når vi ber om filene, ønsker vi ikke å be om det /public/lib/file.js: Vi ønsker å få /lib/file.js. Så, vi må sette baseURL:

"jam": "packageDir": "public / lib", "baseUrl": "public"

Nå kan vi sette avhengigheter i sin egen hash:

"jam": "packageDir": "public / lib", "baseUrl": "offentlig", "avhengigheter": "jquery": "1.8.0", "ryggraden": null

Dette sier at vi vil laste ned jQuery 1.8.0 og den nyeste versjonen av Backbone. Lagre og lukk nå package.json fil og la oss installere disse bibliotekene.

For å gjøre det, kjører du bare:

jam installasjon

Som du kan se, er både jQuery og Backbone installert. Legg også merke til at Underscore.js ble installert; det er fordi det er en avhengighet av ryggraden.

For å sikre at alt dette fungerer, la oss bygge en super-liten Express-app. Hvis du aldri har jobbet med Express før, ikke bekymre deg. Vi justerer bare en visning.

I MinApp mappe som Express genererte, åpne visninger / index.jade i din favoritt tekstredigerer. Fjern alt innholdet og erstatt det med dette:

#main script (src = "lib / require.js") skript krever (['app'], funksjon (App) // vi kommer tilbake til dette.);

Dette er Jade-kode, og ligner HAML. Det skal være ganske selvforklarende: den første linjen skaper en

med et id med hoved-. Da har vi to skriptkoder.

Vi legger litt JavaScript inn der i et øyeblikk. Først i offentlig mappe, opprett en app.js fil og sett dette inn i det:

define (['jquery', 'ryggrad', 'understreking'], funksjon ($, BB, _) var site = new BB.Model (navn: "Nettuts +", url: "http: //net.tutsplus .com ", twitter:" envatowebdev "), SiteView = BB.View.extend (el:" #main ", mal: _.template ("

"><%= name %> | "+" "> @<%= twitter %>

"), gjengi: funksjon () this.el.innerHTML = this.template (this.model.toJSON ()); returner dette;); return site: site, SiteView: SiteView;);

Dette antar en liten kjennskap til Backbone, men det er ikke for vanskelig: Vi skaper bare en enkel modell, og en ny Vis klasse for å gjengi den modellen (Visningen gjengis i div # main element). De viktige tingene å merke seg her er hvordan vi bruker alle tre avhengighetene våre i den første definere parameter. Da blir de parametrene til modulmodulen vår. På slutten returnerer vi et objekt med vår modell og View-klassen.

Nå, tilbake i vår visninger / index.jade fil, kan vi fylle ut innholdet av det krever anrop.

krever (['app'], funksjon (App) nytt App.SiteView (modell: App.site). render (););

Nå, tilbake på kommandolinjen, la oss installere Express-avhengighetene og starte serveren:

npm installere && npm start

Når serveren starter, gå over til localhost: 3000. Du bør se gjengitt visning: bare to lenker. Super-enkel, men vi vet at alle delene fungerer.


Kompilere skriptene dine

Det neste trinnet når du bruker AMD, er å kompilere de mange skriptfilene du har lagt inn i en enkelt fil, som skal brukes i produksjonen. Igjen, Jam gjør dette utrolig enkelt. Bare kjør dette:

syltetøy kompilere output.js

Dette output.js filen vil ha innholdet i require.js så vel som alle våre biblioteker, så det kan erstatte require.js fil som vi for tiden drar inn i vår index.jade. Imidlertid foreslår Jam docs noe som gjør det enda enklere: overskrive det require.js. På denne måten trenger du ikke endre noe i HTML-filene dine eller maler. Så, jeg kjører dette:

syltetøy kompilere offentlig / lib / require.js

Nå, hvis du oppdaterer siden, vil du legge merke til at vi laster inn vår enkelt require.js fil, og deretter bruke det for å få vår app.js fil. Men la oss ta et skritt videre: løp

jam compile -i app public / lib / require.js

Her forteller vi det at inngangen (-Jeg) for samlingen skal være app modul. Jam vet å se i den offentlige mappen, på grunn av vår package.json innstillinger, og selvfølgelig vil filen være .js. Den fine ting her er at selv om vi bare forteller det å kompilere en enkelt modul, og avhengigheter for den modulen vil bli inkludert i den kompilerte filen. Nå oppdaterer du siden, og du ser at vi bare har en enkelt JavaScript-fil lastet. Hvordan er det for effektivt, eh?

Jeg bør merke at hvis du installerer en annen pakke via jam, kompileres dette require.js filen blir overskrevet. Alt vil fortsatt fungere, akkurat som før; du må bare kompilere før du presser til produksjon igjen. Du kan tilbakestille filen på egenhånd ved å kjøre jam gjenoppbygging (Du kan også bruke denne kommandoen for å gjenoppbygge require.js fil etter endring av konfigurasjonsalternativer i package.json).


Finne pakker

Vel, til dette punktet, er Jam alt ganske flatt. Men det er selvfølgelig en fangst: hele ideen om Jam er avhengig av pakkene du vil være tilgjengelig, ikke sant? Så hvordan finner du disse pakkene?

To veier. Først er det kommandolinjeverktøyet jam søk. Bare legg til et søkeord, og du får en liste over tilgjengelige pakker som samsvarer med søket ditt. For eksempel, her er hva jeg får når jeg løper jam søk hendelser:

Hvis du foretrekker en GUI, kan du gå over til http://jamjs.org/packages for å bla gjennom de tilgjengelige.

Hvis du er interessert i å utvikle pakker for å dele via Jam, bør du ikke finne det vanskelig. Ta en titt på pakningsutviklingsdokumentasjonen for detaljer om hva du skal gjøre.

Ønsker å lære mer om Express? Så ta min Tuts + Premium kurs!

Konklusjon

Det gjør en "litt tøff" beste praksis som friksjonsfri som mulig!

AMD er en fin måte å organisere et stort JavaScript-program på, men det kan være litt av et problem å bruke. Som jeg sa, det er derfor jeg elsker Jam: det gjør en "litt tøff" beste praksis som friksjonsfri som mulig! Før, jeg ville ikke bruke AMD på grunn av det ekstra arbeidet; Nå, med Jam, er det lettere å bruke det enn å ikke.

Så, hva synes du om Jam? Vil det gjøre AMD enklere for deg? Eller har du allerede en AMD-arbeidsflyt som du foretrekker? La oss høre det i kommentarene!