【发布时间】:2012-11-18 17:01:50
【问题描述】:
我使用 CoffeeScript 已经有一段时间了。现在我需要写一个npm包,我可以用CoffeeScript写,还是把CoffeeScript编译成JavaScript?
【问题讨论】:
标签: node.js coffeescript npm
我使用 CoffeeScript 已经有一段时间了。现在我需要写一个npm包,我可以用CoffeeScript写,还是把CoffeeScript编译成JavaScript?
【问题讨论】:
标签: node.js coffeescript npm
我从头开始用 CoffeeScript 编写 npm 包。我鼓励您将 CoffeScript 用于节点和浏览器。但是,在您可以使用或发布您的模块之前,您必须将源 CoffeeScript 编译为 JavaScript。不过,这不应该阻止您使用 CoffeeScript。
提示:在开发过程中,使用coffee -cw yourfile.coffee(命令行)查看文件的更改并在保存时编译。
【讨论】:
我会建议你用coffeescript 编写你的包,但只用javascript 发布它。我是这样做的:
src
lib
src 致力于我的 git repo,lib 在我的 .gitignore
lib 发布到 npm,src 在我的 .npmignore
coffee-script 包在我的devDependencies 中
你可以看看我的一个简单的包,refix,以获得灵感:
npm install refix【讨论】:
prepublish 任务来编译你的咖啡脚本是在你发布之前自动化这个的一种方便的方法——因为我们有时都会忘记编译。有关更多信息,请参阅 npm scripts 文档:npmjs.org/doc/scripts.html
.gitignore 中。将 lib 文件夹保存在 git 中非常方便,以便人们可以通过 git url 引用您的包。
lib/,并且可以安全地将它添加到忽略,就像Linus在这里建议的那样.请参阅 - github.com/ilkosta/static-jade-brunch 了解如何使用这些钩子的示例(以及如何避免全局安装 coffeescript)
你可以在 coffeescript 中编写 NPM 模块,但为了让 JS 用户可以使用它们,必须先将它们编译为 JS,然后才能在 NPM 上发布。
package.json 使用他们的prepublish 脚本挂钩使这变得容易,该挂钩在您发布之前运行指定的脚本。下面是zombie.js 中prepublish NPM 钩子的示例
https://github.com/assaf/zombie/blob/master/package.json#L16
【讨论】:
虽然我不确定这是否是最好的方法,但从技术上讲,可以主要用 CoffeeScript 编写你的包。
基本上,你可以写一个简单包装coffee命令的JS文件,像这样:
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);
});
运行node howl.js(或在全局安装时简单地运行howl)现在将输出Awwooooo!。您可以执行 require 其他 CoffeeScript 文件之类的操作,并通过将它们从 JavaScript“包装器”传递给 CoffeeScript 来访问参数。
无论如何,可能有理由不这样做,但到目前为止它对我有用,所以我想我会提交这个以获得额外的视角。
有关使用此技术的简单示例项目,请查看https://www.github.com/joshuabc/packdown。
【讨论】:
coffee-script/register 依赖于已弃用的require.extensions。根据 nodejs.org:“由于 Module 系统被锁定,此功能可能永远不会消失。但是,它可能有细微的错误和复杂性,最好保持不变。” 该功能是 @987654323 @,但在我看来,弃用是一个很好的理由来避开。
如果您的许多模块在其devDependencies 中包含coffee-script,那么只全局安装coffee-script 而不是为每个模块安装它(这需要更长的时间)会很有用。
coffee-build 是coffee-script 的全局版本管理器。
只需将这 2 个脚本添加到您的 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 才能安装您的模块。
【讨论】: