2012-01-18 7 views

risposta

8

Inserire i codici CoffeeScript nella cartella src e i codici JavaScript compilati nella cartella lib.

Quindi nel file package.json, dichiarare main come il file js nella cartella lib. Quindi gli utenti del pacchetto richiederanno il file js invece del file caffè.

Si può prendere @ TrevorBurnham repository come un esempio.

+0

E 'sorta di sente strano commettere codice compilato, ma credo che ho intenzione di provare che. –

+1

Il repository git è collegato a npm? Perché se non lo è, potrei generare la cartella lib poco prima che npm lo pubblichi e lo cancelli dopo. –

+1

@MarcelM. Non è. A proposito, puoi usare .gitignore per ignorare la cartella 'lib' invece di cancellarla. – qiao

8

Ho terminato con solo una cartella src nel mio repository git; un file .gitignore con una riga per lib; e un file vuoto .npmignore. Il file vuoto .npmignore è necessario perché se non si trova sul modulo, viene utilizzato il tuo .gitignore.

Ho appena aggiunto un Cakefile con un compito di costruire la mia directory src utilizzando coffee --compile --output lib/ src/ e un compito pretest e prepublish a package.json per costruire prima del test e la pubblicazione.

"scripts": { "pretest": "cake build", "prepublish": "cake build", }

Questa soluzione mantiene il mio repository git pulita (senza codice compilato), ma aggiunge il mio codice javascript per lib durante la pubblicazione di NPM.

+2

Puoi vedere che funziona su https://github.com/reaktivo/zootool –

+0

Nota: questo non funziona (ancora) per "npm install reaktivo/zootool". Qualcuno potrebbe voler fare qualcosa di simile se biforca il tuo repository e stavi aspettando che tu prendessi la loro patch. –

1

sto appena iniziato con CoffeeScript, ma io suggerirei le seguenti:

  1. Conservare il codice CoffeeScript in src/*.coffee,
  2. Scrivi una main.js nella root del progetto che prenderà NPM, e fare semplicemente qualcosa come require('coffee-script'); require('./src/my_lib.coffee').

Lì. Non compili mai e poi mai il tuo codice; è tutto gestito in modo trasparente. Non si controlla il codice compilato in git, né si pubblica JavaScript compilato superfluo a fianco di CoffeeScript non compilato su NPM.

Edit: In più recenti versioni del caffè-scirpt, si dovrebbe require('coffee-script/register');

+2

Si sente come rendere 'coffee-script' un requisito per un modulo che non si sta sviluppando non è l'idea migliore. –

+0

Non sono sicuro di aver compreso il commento di cui sopra - come sta avendo 'coffee-script' una dipendenza diversa dalla presenza di 'underscore' come dipendenza? – lambinator

+0

Underscore è una libreria, mentre CoffeeScript è un linguaggio compilato. È necessaria la funzionalità di una libreria in fase di esecuzione. Con un linguaggio compilato non (necessariamente). Tutto ciò di cui hai bisogno è il codice risultante. (Se fosse un linguaggio interpretato, * avresti * bisogno di funzionalità in fase di esecuzione.) – 1j01

Problemi correlati