¿Puedo escribir el paquete npm en coffeescript?

He usado coffeescript por un tiempo. Ahora necesito escribir un paquete npm, ¿puedo escribirlo en coffeescript o debería comstackr coffeescript en javascript?

Le sugeriré que escriba su paquete en coffeescript, pero que solo lo publique en javascript. Lo hago así:

  • coffeescript código va en src
  • el código se comstack a lib
  • src está comprometido con mi repository git, lib está en mi .gitignore
  • lib se publica a npm, src está en mi .npmignore
  • el paquete coffee-script está en mis devDependencies

Puedes echar un vistazo a un paquete simple mío, refijo , para inspirarte:

Puede escribir módulos NPM en coffeescript, pero para que los usuarios de JS puedan utilizarlos, deben comstackrse en JS antes de publicar en NPM.

package.json facilita esto con su enganche de script de prepublish que ejecuta el script especificado antes de publicar. Aquí hay un ejemplo de un gancho de NPM prepublish en zombie.js

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

He escrito paquetes npm en CoffeeScript desde cero. Le animo a utilizar CoffeScript para el nodo, así como para el navegador. Sin embargo, antes de poder usar o publicar su módulo, debe comstackr la fuente de CoffeeScript a JavaScript. Sin embargo, eso no debería impedirle usar CoffeeScript.

Consejo: Durante el desarrollo, use coffee -cw yourfile.coffee (línea de comando) para ver los cambios y comstackr el archivo.

Si bien no estoy seguro de si es el mejor enfoque, técnicamente es posible escribir su paquete principalmente en CoffeeScript.

Básicamente, puede escribir un archivo JS que simplemente envuelva el comando de coffee , así:

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); }); 

¡El node howl.js ejecución node howl.js (o simplemente el howl cuando se instala globalmente) ahora emitirá Awwooooo! . Puede hacer cosas como require otros archivos de CoffeeScript y acceder a los argumentos pasándolos desde el “contenedor” de JavaScript a CoffeeScript.

De todos modos, puede haber razones para no hacer esto, pero hasta ahora me ha funcionado, así que pensé en enviar esto para una perspectiva adicional.

Para un proyecto de ejemplo simple que use esta técnica, visite https://www.github.com/joshuabc/packdown .

Si muchos de sus módulos tienen coffee-script en sus devDependencies , es útil simplemente instalar coffee-script globalmente coffee-script lugar de instalarlo para cada módulo (lo que lleva mucho más tiempo).

coffee-build es un gestor de versión global para coffee-script .

Solo agrega estos 2 scripts a tu package.json :

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

Observe que -v 1.11.x no es una versión exacta, lo que permite actualizaciones implícitas.

El único inconveniente es que los usuarios deben npm install -g coffee-build antes de que puedan instalar su módulo.