Ich habe CoffeeScript für eine Weile verwendet. Jetzt muss ich ein npm-Paket schreiben, kann ich es in CoffeeScript schreiben oder sollte ich CoffeeScript in JavaScript kompilieren?
Antworten:
Ich werde vorschlagen, dass Sie Ihr Paket in Coffeescript schreiben, es aber nur in Javascript veröffentlichen. So mach ich es:
src
lib
src
ist meinem git repo verpflichtet, lib
ist in meinem.gitignore
lib
wird bis npm veröffentlicht, src
ist in meinem.npmignore
coffee-script
Paket ist in meinemdevDependencies
Sie können sich ein einfaches Paket von mir ansehen , refix , um sich inspirieren zu lassen:
npm install refix
prepublish
Aufgabe in Ihrem package.json, die Ihr Kaffeeskript kompiliert, eine praktische Möglichkeit ist, dies vor Ihrer Veröffentlichung zu automatisieren - da wir alle manchmal vergessen, zu kompilieren. scripts
Weitere Informationen finden Sie im npm- Dokument: npmjs.org/doc/scripts.html
.gitignore
. Es ist sehr praktisch, den lib-Ordner in git zu behalten, damit Benutzer über eine git-URL auf Ihr Paket verweisen können.
lib/
in Ihrem Git-Repository einchecken und können es sicher hinzufügen, um es zu ignorieren, wie Linus es hier vorschlägt. Unter - github.com/ilkosta/static-jade-brunch finden Sie ein Beispiel dafür, wie Sie diese Hooks verwenden können (und wie Sie möglicherweise eine globale Installation von Coffeescript vermeiden können)
Sie können NPM-Module in Coffeescript schreiben. Damit sie jedoch von JS-Benutzern verwendet werden können, müssen sie vor der Veröffentlichung auf NPM in JS kompiliert werden.
package.json
macht dies einfach mit ihrem prepublish
Skript-Hook, der das angegebene Skript ausführt, bevor Sie veröffentlichen. Hier ist ein Beispiel für eineprepublish
NPM-Hook in zombie.js
https://github.com/assaf/zombie/blob/master/package.json#L16
Wenn viele Ihrer Module haben coffee-script
in ihren devDependencies
, dann ist es sinnvoll, nur global zu installierencoffee-script
, anstatt es installieren für jedes Modul (das dauert viel länger).
Coffee-Build ist ein globaler Versionsmanager fürcoffee-script
.
Fügen Sie einfach diese 2 Skripte zu Ihrem hinzu package.json
:
{
"name": "my-coffee-module",
"scripts": {
"build": "coffee-build -v 1.11.x -b -o js src",
"postinstall": "npm run build"
}
}
Beachten Sie, dass -v 1.11.x
es sich nicht um eine exakte Version handelt, die implizite Upgrades ermöglicht.
Der einzige Nachteil ist, dass Benutzer müssen, npm install -g coffee-build
bevor sie Ihr Modul installieren können.
Ich habe npm-Pakete in CoffeeScript von Grund auf neu geschrieben. Ich empfehle Ihnen, CoffeScript sowohl für den Knoten als auch für den Browser zu verwenden. Bevor Sie Ihr Modul jedoch verwenden oder veröffentlichen können, müssen Sie das Quell-CoffeeScript in JavaScript kompilieren. Das sollte Sie jedoch nicht davon abhalten, CoffeeScript zu verwenden.
Tipp: Verwenden Sie während der Entwicklung coffee -cw yourfile.coffee
(Befehlszeile), um die Datei auf Änderungen zu überwachen und beim Speichern zu kompilieren.
Während ich bin nicht sicher , ob es der beste Ansatz ist, technisch es ist möglich , Ihr Paket meist in Coffeescript zu schreiben.
Grundsätzlich können Sie eine JS-Datei schreiben, die den coffee
Befehl einfach wie folgt umschließt :
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);
});
Das Ausführen node howl.js
(oder einfach, howl
wenn es global installiert ist) wird jetzt ausgegeben Awwooooo!
. Sie können Dinge wie tunrequire
andere CoffeeScript-Dateien und auf Argumente zugreifen, indem Sie sie vom JavaScript- "Wrapper" an das CoffeeScript übergeben.
Wie auch immer, es mag Gründe geben, dies nicht zu tun, aber es hat bisher für mich funktioniert, so dass ich dachte, ich würde dies für eine zusätzliche Perspektive einreichen.
Ein einfaches Beispielprojekt mit dieser Technik finden Sie unter https://www.github.com/joshuabc/packdown .
coffee-script/register
hängt von require.extensions ab, die veraltet sind. Laut nodejs.org: "Da das Modulsystem gesperrt ist, wird diese Funktion wahrscheinlich nie verschwinden . Es kann jedoch subtile Fehler und Komplexitäten geben, die am besten unberührt bleiben." Es ist unwahrscheinlich, dass das Merkmal aus dem Kaffee selbst entfernt wird , aber meiner Meinung nach ist die Abwertung ein guter Grund, sich klar zu machen.