web-dev-qa-db-ja.com

コーヒースクリプトでnpmパッケージを書くことはできますか?

私はしばらくの間、コーヒースクリプトを使用しています。今、私はnpmパッケージを書く必要があります、それをcoffeescriptで書くことができますか、それとも私はcoffeescriptをjavascriptにコンパイルする必要がありますか?

69
Zhe Chen

パッケージをcoffeescriptで記述し、javascriptでのみ公開することをお勧めします。私はそれをこのようにします:

  • coffeescriptコードはsrcに入ります
  • コードはlibにコンパイルされます
  • srcは私のgitリポジトリにコミットされ、libは私の.gitignore
  • libはnpmに公開され、srcは私の.npmignore
  • coffee-scriptパッケージはdevDependenciesにあります

インスピレーションを得るために、私の単純なパッケージ refix をご覧ください。

NPMモジュールはcoffeescriptで記述できますが、JSユーザーが使用できるようにするには、NPMで公開する前にそれらをJSにコンパイルする必要があります。

package.jsonは、公開する前に指定されたスクリプトを実行するprepublishスクリプトフックでこれを簡単にします。以下は、zombie.jsのprepublish NPMフックの例です。

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

10
Joseph Moniz

CoffeeScriptでnpmパッケージを最初から作成しました。ノードだけでなくブラウザにもCoffeScriptを使用することをお勧めします。ただし、モジュールを使用または公開する前に、ソースのCoffeeScriptをJavaScriptにコンパイルする必要があります。ただし、CoffeeScriptの使用を妨げるものではありません。

ヒント:開発中はcoffee -cw yourfile.coffee(コマンドライン)でファイルの変更を監視し、保存時にコンパイルします。

1
davidpfahler

多くのモジュールのdevDependenciescoffee-scriptが含まれている場合は、モジュールごとにインストールするのではなく、グローバルにcoffee-scriptをインストールするのが便利です(時間がかかります)。

coffee-buildcoffee-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を実行する必要があることです。

1
aleclarson

それが最善のアプローチであるかどうかはわかりませんが、技術的にはほとんどの場合、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 を確認してください。

0
joshuarh