0

私はこの例に従いました: Coffeescript と node.js の混乱。クラスのインスタンス化が必要ですか? 、しかしそれはうまくいかないようです - エラーは ですTypeError: undefined is not a functionので、私は何か間違ったことをしているに違いありません。シンプルなコーヒースクリプトの実行可能ファイルがあります。私の手順は次のとおりです。

フォルダー構造を作成します。

appmq

  • my_executable

  • my_class.coffee

  • パッケージ.json

ファイルの内容:

package.json:

{
    "name": "appmq",
    "version": "0.0.1",
    "description": "xxxxxx",
    "repository": "",
    "author": "Frank LoVecchio",
    "dependencies": {
    },
    "bin": {"appmq": "./my_executable"}
}

my_executable:

#!/usr/bin/env coffee
{CommandLineTools} = require './my_class'
cmdTools = new CommandLineTools()

cmdTools.debug()

my_class:

class CommandLineTools

  debug: () ->
    console.log('Version: ' + process.version)
    console.log('Platform: ' + process.platform)
    console.log('Architecture: ' + process.arch)
    console.log('NODE_PATH: ' + process.env.NODE_PATH)

module.exports = CommandLineTools

次に、次の方法でアプリケーションをインストールします。

sudo npm install -g

次に、アプリケーションを実行します (上記のエラーが発生します)。

appmq

4

2 に答える 2

2

クリスは彼の答えで正しいですが、クラスに明示的なコンストラクターがあるかどうかとは関係なく、エクスポートしているものとは関係ありません。

次のように単一のクラスをエクスポートする場合:

module.exports = CommandLineTools

次に、あなたがrequire、返されるものは、module.exports上記で割り当てたものになります。

CommandLineTools = require './my_class'

そして、これはうまくいきます。あなたがしていることは、上記の方法でエクスポートしていますが、CoffeeScript のdestructuring 割り当てを使用しています。

{CommandLineTools} = require './my_class'

jsにコンパイルされます:

var CommandLineTools;
CommandLineTools = require('./my_class').CommandLineTools;

require呼び出しはプロパティを持つオブジェクトではなく、それ自体を返すためCommandLineToolsCommandLineToolsこれは失敗します。ここで、上記の destructuring assigment を使用したい場合は、次のようにエクスポートする必要がありますCommandLineTools:

exports.CommandLineTools = CommandLineTools

これが問題に光を当てることを願っています。それ以外の場合は、コメントで質問してください。

于 2012-07-25T10:17:15.760 に答える
1

クラスにコンストラクターがありません。交換

{CommandLineTool} = require './my_class'

CommandLineTool = require './my_class'

または(空の)コンストラクターを記述します。

于 2012-07-25T05:49:18.427 に答える