2016-07-06 4 views
2

InversifyJSを使用してNodeJS/TypeScriptプロジェクトを設定しようとしていますが、地面から降りていくときに問題があります。私はこの数日間、これを見てきましたが、問題を理解することはできません。すべてが正しくビルドし、私はノードのサーバーを起動しようとすると、次のエラーを取得:InversifyJS - injectableが関数ではありません

TypeError: inversify_1.injectable is not a function 

私はNodeJSのV6.2.2(Windowsの10のx64)を実行しているのと活字体1.8がインストールされています。私はVS2015とgulpの両方を使ってビルドを試みました。以下は私が試みた最小の例ですが、同じエラーが発生します。私は間違ったことは何も見えませんが、私は明らかな何かを見逃すはずです。 (余談ずさんなコード、それはまだ動作します。)

server.ts:

/// <reference path="./node_modules/reflect-metadata/reflect-metadata.d.ts" /> 
/// <reference path="./node_modules/inversify-dts/inversify/inversify.d.ts" /> 
/// <reference path="./typings/index.d.ts" /> 

import "reflect-metadata" 
import { Application } from "./app/app" 
import { ITest, TestClass } from "./app/testclass" 
import { Kernel, injectable, inject } from "inversify" 

var kernel = new Kernel(); 
kernel.bind<ITest>("ITest").to(TestClass); 
kernel.bind<Application>(Application).to(Application); 

var app = kernel.get<Application>(Application); 
app.initialize(); 

APP/

/// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> 
/// <reference path="../typings/index.d.ts" /> 

import * as Hapi from "hapi"; 
import { inject, injectable } from "inversify" 
import { ITest } from "../app/testclass" 

@injectable() 
export class Application { 
    private testClass: ITest; 

    constructor(@inject("ITest") test: ITest) { 
     this.testClass = test; 
    }; 

    initialize() { 
     var server = new Hapi.Server({ 
      connections: { 
       router: { 
        isCaseSensitive: false, 
        stripTrailingSlash: true 
       } 
      } 
     }); 

     server.connection({ 
      port: '3000', 
      host: 'localhost' 
     }); 

     server.route({ 
      method: 'GET', 
      path: '/', 
      handler: (request: Hapi.Request, reply: Hapi.IReply) => { 
       var str = this.testClass.test(); 
       reply(str); 
      } 
     }); 

     server.start(function() { 
      console.log('Server running at:', server.info.uri); 
     }); 
    } 
} 

APP/testclass.ts

/// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> 

import { injectable } from "inversify" 

export interface ITest { 
    test(): string; 
} 

@injectable() 
export class TestClass implements ITest { 
    test(): string { 
     return "testing"; 
    } 
} 

をapp.ts tsconfig.json

{ 
    "files": [ 
     "server.ts", 
     "app/app.ts", 
     "app/testclass.ts" 
    ], 
    "compilerOptions": { 
     "module": "commonjs", 
     "noImplicitAny": true, 
     "target": "es6", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "outDir": "../release/" 
    } 
} 

ノードからの完全なエラー出力:

C:\Projects\inversifytest\release\app\app.js:50 
    inversify_1.injectable(), 
       ^

TypeError: inversify_1.injectable is not a function 
    at Object.<anonymous> (C:\Projects\inversifytest\release\app\app.js:50:17) 
    at Module._compile (module.js:541:32) 
    at Object.Module._extensions..js (module.js:550:10) 
    at Module.load (module.js:458:32) 
    at tryModuleLoad (module.js:417:12) 
    at Function.Module._load (module.js:409:3) 
    at Module.require (module.js:468:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (C:\Projects\inversifytest\release\server.js:6:15) 
    at Module._compile (module.js:541:32) 

答えて

1

私はそれを考え出した - 私が疑われるとして、それはダム間違いでした。私は間違ったバージョンのInversifyJSをインストールしました。デコレータは新しいバージョン2.xでのみ動作し、npmは1.3.1をインストールしています(バージョンを明示的に指定しなかったため)。

+0

ありがとう、私は同じダムミスをしました。 –

関連する問題