我已经使用了CoffeeScript一段时间了。现在,我需要编写一个npm包,可以在CoffeeScript中编写它,还是应该将CoffeeScript编译为JavaScript?
Answers:
我建议您使用coffeescript编写程序包,但仅将其发布为javascript。我这样做是这样的:
src
lib
src
致力于我的git repo,lib
在我的.gitignore
lib
发布到npm,src
在我的.npmignore
coffee-script
包是我的devDependencies
您可以看一下我的简单软件包refix,以获取启发:
npm install refix
prepublish
在package.json中定义一个可编译coffeescript的任务是在发布之前自动执行此任务的便捷方法-因为我们所有人有时都忘记编译。有关scripts
更多信息,请参见npm doc:npmjs.org/doc/scripts.html
.gitignore
。将lib文件夹保存在git中非常方便,以便人们可以通过git url引用您的软件包。
lib/
在git存储库中检入.js即可,并且可以安全地将其添加为忽略,就像Linus在此处建议的那样。请参见-github.com/ilkosta/static-jade-brunch,以获取如何使用这些钩子的示例(以及如何避免在全球范围内安装coffeescript的示例)
您可以用coffeescript编写NPM模块,但是为了使JS用户可以使用它们,必须先将它们编译为JS,然后再在NPM上发布。
package.json
他们的prepublish
脚本挂钩使发布变得容易,该脚本挂钩在发布前运行指定的脚本。这prepublish
是zombie.js中NPM挂钩的示例
https://github.com/assaf/zombie/blob/master/package.json#L16
如果你的很多模块都coffee-script
在他们的devDependencies
,是非常有用的只是全球安装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
先安装模块。
虽然我不知道这是否是最好的方法,技术上是可以写你的包大多在CoffeeScript的。
基本上,您可以编写一个简单地包装coffee
命令的JS文件,如下所示:
箱/ how咖啡
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);
});
现在将运行node howl.js
(或仅howl
在全局安装时运行)输出Awwooooo!
。您可以执行require
其他CoffeeScript文件之类的操作,并通过将参数从JavaScript“包装器”传递到CoffeeScript来访问参数。
无论如何,也许有理由不这样做,但是到目前为止它对我来说还是有效的,所以我想将其提交给其他人。
对于使用此技术的简单示例项目,请查看https://www.github.com/joshuabc/packdown。
coffee-script/register
取决于已弃用的require.extensions。根据nodejs.org的说法:“由于模块系统被锁定,因此该功能可能永远不会消失。但是,它可能存在细微的错误和复杂性,最好不要改动。” 该功能不太可能从咖啡本身中删除,但在我看来,弃用是避免混淆的很好理由。