我可以在coffeescript中编写npm包吗?

我已经使用咖啡一段时间了。 现在我需要写一个npm包,我可以写在coffeescript,或者我应该编译成javascript的coffeescript?

我会build议你用coffeescript编写你的软件包,但只能用javascript发布。 我这样做:

  • 咖啡代码进入src
  • 代码被编译为lib
  • src是致力于我的git repo, lib是在我的.gitignore
  • lib发布到npm, src在我的.npmignore
  • coffee-script包在我的devDependencies

你可以看看我的一个简单的包, refix ,以获得灵感:

您可以使用coffeescript编写NPM模块,但为了让JS用户可以使用它们,必须先将其编译为JS,然后才能在NPM上发布。

package.json使用它的prepublish脚本钩子很容易,它在发布之前运行指定的脚本。 下面是一个在zombie.js中预先prepublish NPM钩子的例子

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

我从零开始在CoffeeScript中编写了npm包。 我鼓励你使用CoffeScript作为节点以及浏览器。 但是,在使用或发布模块之前,必须将源代码CoffeeScript编译为JavaScript。 不过,这不应该阻止你使用CoffeeScript。

提示:在开发过程中,使用coffee -cw yourfile.coffee (命令行)观察文件的变化并在保存时编译。

虽然我不确定这是否是最好的方法,但从技术上讲,可以使用CoffeeScript编写您的程序包。

基本上,你可以写一个简单的包装coffee命令的JS文件,就像这样:

斌/ howl.coffee

 console.log 'Awwwooooo!' 

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

运行node howl.js (或者在全局安装时只是howl )现在将输出Awwooooo! 。 您可以通过将其从JavaScript“包装器”传递给CoffeeScript来执行其他CoffeeScript文件和访问参数。

无论如何,可能有理由不这样做,但迄今为止我已经工作了,所以我想提出这个从另一个angular度来看。

对于使用这种技术的简单示例项目,请查看https://www.github.com/joshuabc/packdown

如果您的许多模块在devDependencies都有coffee-script ,那么只需全局安装coffee-script而不是为每个模块安装coffee-script (这需要花费更长的时间)。

coffee-build是coffee-script的全球版本经理。

只需将这两个脚本添加到您的package.json

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

注意-v 1.11.x是不是一个确切的版本,它允许隐式升级。

唯一的缺点是用户必须先npm install -g coffee-build才能安装你的模块。