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?
Odpowiedz
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 moimdevDependencies
Można spojrzeć na prosty pakiet kopalni refix, inspiracji:
- https://github.com/linus/refix
npm install refix
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
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
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). –
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.
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
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.
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
Poprzedni przykład to: require ('coffe-script/register'); var howl = require ("./ howl"); – Diego
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
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ł.
- 1. Czy mogę zainstalować pakiet NPM z javascript działającego w Node.js?
- 2. pakiet nodejs npm | Problem z linkiem npm
- 3. Czy mogę napisać skrypty dla hubota w JavaScript?
- 4. Czy mogę mieszać JS i CoffeeScript w projekcie?
- 5. jak napisać setTimeout z parametrami przez Coffeescript
- 6. Pakiet instalacyjny npm z podfolderu gitub repo
- 7. coffeescript install
- 8. Czy mogę napisać screencapture w Pythonie
- 9. NPM pakiet „bin” skrypt dla Windows
- 10. Jak zaktualizować pakiet npm z lokalnego folderu
- 11. Czy mogę dodać skrypt debugowania do NPM?
- 12. Coffeescript. w/w pętli
- 13. Czy mogę napisać kursywę do powłoki Pythona?
- 14. Jak mogę umieścić dane JSON w CoffeeScript?
- 15. Jak mogę odczytać pozycję wcięcia w CoffeeScript?
- 16. Node.js/npm - czy mimo to stwierdzić, czy pakiet jest czystym JS czy nie?
- 17. Czy mogę określić opcjonalne zależności modułów w npm pakiet.json?
- 18. Jak dołączyć pakiet npm materialize-css z pakietem sieci Web
- 19. Czy mogę napisać funkcję wykonującą obliczenia symboliczne w Pythonie 2.7?
- 20. Dlaczego działający globalnie pakiet połączony npm otwiera plik bin?
- 21. Czy mogę zadeklarować/użyć jakiejś zmiennej w LINQ? Czy mogę napisać wyraźniej po LINQ?
- 22. Instalacja pakiet Socket.io w node.js
- 23. Czy mogę ustawić npm, aby użyć pliku .pac?
- 24. Czy istnieje oficjalny pakiet nuget dla Angular 2?
- 25. jak mogę napisać instrukcję IF w mysql
- 26. Składnia funkcji anonimowych w CoffeeScript
- 27. Zakres w klasach coffeescript
- 28. Jak sprawdzić, czy pakiet NPM został zainstalowany na całym świecie lub lokalnie
- 29. mogę napisać pętlę dla CSS
- 30. Jak mogę całkowicie usunąć pakiet w Perlu?
Zobacz także: http://stackoverflow.com/questions/26196595/how-do-i-compile-coffeescript-before-publishing-to-npm –