2017-11-08 19 views
0

私はaureliaプロジェクトで、typescriptを使ってjavascriptを作成しています。今度は別のカスタムライブラリ 'hash-set'(jspm install npm:hash-set --saveを使用)を追加しようとしました。しかし、私は実際にこのパッケージを使用することはできません(loaderとしてsystemjsを使用して)。typescript/systemjsでハッシュセットモジュールをインポートできませんか?

マイドキュメント構造が似ている:

\ 
dist\ 
    src\ 
     app.html 
     app.js 
     main.js 
jsp_packages\ 
    npm\ 
     [email protected]\ 
node_modules\ 
index.html 
config.js 
package.json 
tsconfig.json 

重要なファイル(私が思うに、私は何かを逃した場合、コメントに明記してください):

index.htmlを

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Test</title> 
    </head> 

    <body aurelia-app="src/main"> 

    <script src="jspm_packages/system.js"></script> 
    <script src="config.js"></script> 
    <script> 
     SystemJS.import('aurelia-bootstrapper'); 
    </script> 
    </body> 
</html> 

app.ts これは事前ビルドされた手順としてapp.jsにコンパイルされます。 es2015をターゲット構成として使用する。

import {hashSet} from 'hash-set'; 

export class App { 
    public myText: string; 
    hashFn(value) { 
    return value.toString(); 
    } 

    constructor() { 
    alert("oh"); 
    const h = hashSet; 
    const StringSet = hashSet(this.hashFn); 
    alert('oh2'); 
    } 
} 

config.jsの

System.config({ 
    defaultJSExtensions: true, 
    transpiler: false, 
    paths: { 
    "*": "dist/*", 
    "github:*": "jspm_packages/github/*", 
    "npm:*": "jspm_packages/npm/*" 
    }, 
    meta: { 
    "bootstrap": { 
     "deps": [ 
     "jquery" 
     ] 
    } 
    }, 
    map: { /*lots of aurelia and other library stuff*/ 
    "hash-set": "npm:[email protected]" 
    } 
    } 
}); 

そして、私は上記のコードを実行しようとすると、それはまた今度{"jspm":{"dependencies":"hash-set": "npm:[email protected]^1.0.1"}}}

@package.jsonに記載されています(typescriptですが、作成済みのステップとしてapp.jsしてコンパイル) 、期待どおりapp.js/app.tsが読み込まれます。 (ハッシュセット固有のコードを率直に削除すると、すべてが期待通りに機能します)。

しかし、建設中に "ああ"が表示されますが、 "あまり"は決してありません。コードをデバッグすると、「hashSet」が「未定義」であることが示されます。そのシステムjはハッシュセットを正しく含んでいないと私は信じています。 何か不足していますか?


編集:私はhash_set_1.hashSetがあることを期待し、実際にタイプのある

define(["require", "exports", "hash-set"], function (require, exports, hash_set_1) { 
    "use strict"; 
    Object.defineProperty(exports, "__esModule", { value: true }); 
    class App { 
     hashFn(value) { 
      return value.toString(); 
     } 
     constructor() { 
      alert('oh'); 
      const h = hash_set_1.hashSet; 
      const StringSet = hash_set_1.hashSet(this.hashFn); 
      alert('oh2'); 
     } 
    } 
    exports.App = App; 
}); 
//# sourceMappingURL=app.js.map 

hash_set_1、デバッグ中:生成されたJS(app.js)を掘り下げるは、私は奇妙な何かに気づくファイル。実際に手動でhash_set_1.hashSetを使用しないようにjavascriptを編集するだけでなく、ちょうどhash_set_1が動作します。

試行 import hashSet from 'hash-set';(通知の不足{})は、生成されたjavascriptの違反行をまだ正しくない(デフォルトは定義されていません)const StringSet = hash_set_1.default(this.hashFn);に変更します。

+0

を' hashSet'が行 'constのStringSet = HashSetの(this.hashFn)で定義されていない場合:あなたが行う場合、それが動作するはず

コンソールの大きな脂肪エラー。コンソールにエラーが表示されますか? – Louis

+0

@ルイス 'AggregateError \tは、\tを取得します。\tを取得します。\t(匿名機能)\t未知(約束しています)エラー:アプリケーションを呼び出す際にエラーが発生しました。 aurelia-pal.js:38の内部エラーをチェックしてください。あまり役に立ちませんが、内側のエラーを詳しく調べると、「 'hashSet'」は関数ではありません。 – paul23

答えて

-1

あなたはcodeを見れば、あなたはそれは次のようにエクスポートされ表示されます:輸出はmodule.exports.hashSet = ...でなければならないので

import { hashSet } from 'hash-set';作業することはできませんを行う
module.exports = function hashSet(hashFn) { 

。 ; `と、これは実行を中断し、その後、ブラウザはあなたを与える必要があり

import hashSet = require("hash-set"); 
+0

ああ、はい、役に立たない無駄な行為。 – Louis

関連する問題