2012-11-30 17 views
67

Przez jakiś czas używałem coffeescript. Teraz muszę napisać pakiet npm, czy mogę napisać go w coffeescript, czy też powinienem skompilować coffeescript do javascript?Czy mogę napisać pakiet npm w coffeescript?

+1

Zobacz także: http://stackoverflow.com/questions/26196595/how-do-i-compile-coffeescript-before-publishing-to-npm –

Odpowiedz

99

Proponuję napisać paczkę w coffeescript, ale tylko opublikować ją w javascript. Robię to tak:

  • Kod coffeescript idzie w src
  • kod jest kompilowany do lib
  • src zobowiązuje się do mojego git repo, lib jest w moim .gitignore
  • lib jest publikowany do KMP, src jest w moim .npmignore
  • pakiet coffee-script jest w moim devDependencies

Można spojrzeć na prosty pakiet kopalni refix, inspiracji:

+24

Dodam, że definiuję zadanie 'prepublish' w twoim pakiecie .json, który kompiluje twój coffeescript to przydatny sposób zautomatyzowania tego przed publikacją - ponieważ wszyscy zapominają czasami kompilować. Zobacz skrypt npm 'scripts's, aby uzyskać więcej informacji: https://npmjs.org/doc/scripts.html – smithclay

+10

Jedną z rzeczy, z którą nie zgadzam się, jest przechowywanie folderu lib w' .gitignore'. Jest bardzo przydatne, aby zachować folder lib w git, aby ludzie mogli odwoływać się do twojego pakietu przez adres URL git. – ghempton

+4

Jeśli masz zadanie poinstalacyjne, które kompiluje twój coffeescript, nie musisz sprawdzać .js do 'lib /' w twoim repozytorium git i możesz bezpiecznie dodać to do zignorowania tak, jak sugeruje to Linus. Zobacz - https://github.com/ilkosta/static-jade-brunch na przykład, w jaki sposób możesz użyć tych haków (a także jak uniknąć globalnej instalacji coffeescript). –

1

Napisałem pakiety npm w CoffeeScript od zera. Zachęcam do korzystania z CoffeScript dla węzła, a także dla przeglądarki. Zanim jednak będziesz mógł użyć lub opublikować swój moduł, musisz skompilować kod źródłowy CoffeeScript do JavaScript. To jednak nie powinno powstrzymywać cię przed używaniem CoffeeScript.

Wskazówka: Podczas tworzenia należy użyć coffee -cw yourfile.coffee (wiersza poleceń), aby obejrzeć plik zmian i skompilować przy zapisie.

10

Można pisać moduły KMP w coffeescript, ale w porządku aby mogły być używane przez użytkowników JS, muszą być skompilowane do JS przed opublikowaniem na NPM.

package.json ułatwia to ze skryptem prepublish, który uruchamia określony skrypt przed opublikowaniem. Herezje przykład hak prepublish NPM w zombie.js

https://github.com/assaf/zombie/blob/master/package.json#L16

0

Chociaż nie jestem pewien, czy jest to najlepsze podejście, technicznie jest możliwe napisanie pakiet głównie w coffeescript.

Zasadniczo, można zapisać plik JS, które po prostu otacza komendy coffee, tak:

bin/howl.coffee

console.log 'Awwwooooo!' 

bin/howl.js

#!/usr/bin/env node 

var path = require('path'); 
var exec = require('child_process').exec; 
var coffee = path.resolve(__dirname, '../node_modules/coffee-script/bin/coffee'); 
var howl = path.resolve(__dirname, './howl.coffee'); 
var command = coffee + ' ' + howl; 

exec(command, function(error, stdout) { 
    if (error) { throw error }; 
    console.log(stdout); 
}); 

Uruchamianie node howl.js (lub po prostu howl, gdy jest zainstalowany globalnie) będzie teraz wyświetlać Awwooooo!.Możesz zrobić takie rzeczy jak require inne pliki CoffeeScript i argumenty dostępu, przekazując je z "opakowania" JavaScript do CoffeeScript.

W każdym razie, nie mogą być powody, aby tego nie robić, ale on pracował dla mnie tak daleko, więc pomyślałam, że mogę przedstawić to za dodatkową perspektywę.

Na prostym przykładzie projektu przy użyciu tej techniki, sprawdź https://www.github.com/joshuabc/packdown.

+0

Dla konkretnego przykładu, nie ma potrzeby korzystania z exec. Możesz użyć require ("skrypt/rejestracja kawy"), rejestruje on globalny moduł obsługi dla wymagań, które automatycznie kompilują zależności od kawy. Howerver nie jest dobrą praktyką w bibliotece, ponieważ globalny skrypt kawy może kolidować z innymi wersjami. – Diego

+1

Poprzedni przykład to: require ('coffe-script/register'); var howl = require ("./ howl"); – Diego

+0

Dobry punkt Diego. Kilka szczegółów na ten temat: "skrypt/rejestracja kawy" zależy od [require.extensions] (http://nodejs.org/docs/latest/api/globals.html#globals_require_extensions), który jest przestarzały. Według nodejs.org: * "Ponieważ system Module jest zablokowany, funkcja ta prawdopodobnie nigdy nie zniknie, ale może zawierać subtelne błędy i komplikacje, które najlepiej pozostawić nietknięte." * Funkcja jest mało prawdopodobna do usunięcia z kawy się] (https://github.com/jashkenas/coffeescript/issues/3692), ale moim zdaniem deprecjacja jest dobrym powodem do wyjaśnienia. – joshuarh

0

Jeśli dużo modułach mają coffee-script w ich devDependencies, jest przydatna tylko globalnie zainstalować coffee-script zamiast zainstalować go dla każdego modułu (co trwa znacznie dłużej).

coffee-build jest globalnym menedżerem wersji dla coffee-script.

Wystarczy dodać te 2 skrypty do swojej package.json:

{ 
    "name": "my-coffee-module", 
    "scripts": { 
    "build": "coffee-build -v 1.11.x -b -o js src", 
    "postinstall": "npm run build" 
    } 
} 

Wskazówki jak -v 1.11.x nie jest dokładną wersję, która pozwala ukryte aktualizacje.

Jedynym minusem jest to, że użytkownicy muszą npm install -g coffee-build zanim można zainstalować moduł.

Powiązane problemy