私はしばらくの間、コーヒースクリプトを使用しています。今、私はnpmパッケージを書く必要があります、それをcoffeescriptで書くことができますか、それとも私はcoffeescriptをjavascriptにコンパイルする必要がありますか?
パッケージをcoffeescriptで記述し、javascriptでのみ公開することをお勧めします。私はそれをこのようにします:
src
に入りますlib
にコンパイルされますsrc
は私のgitリポジトリにコミットされ、lib
は私の.gitignore
lib
はnpmに公開され、src
は私の.npmignore
coffee-script
パッケージはdevDependencies
にありますインスピレーションを得るために、私の単純なパッケージ refix をご覧ください。
npm install refix
NPMモジュールはcoffeescriptで記述できますが、JSユーザーが使用できるようにするには、NPMで公開する前にそれらをJSにコンパイルする必要があります。
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
(コマンドライン)でファイルの変更を監視し、保存時にコンパイルします。
多くのモジュールの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
を実行する必要があることです。
それが最善のアプローチであるかどうかはわかりませんが、技術的にはほとんどの場合、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!
が出力されます。 JavaScriptの「ラッパー」からCoffeeScriptに引数を渡すことで、require
などの他のCoffeeScriptファイルを実行し、引数にアクセスできます。
とにかく、これを行わない理由があるかもしれませんが、これまでのところ私にとってはうまくいきました。
この手法を使用した簡単なサンプルプロジェクトについては、 https://www.github.com/joshuabc/packdown を確認してください。