2017-05-22 16 views
4

私は、次のRequireJSで書かれたレガシーJSファイルを、(AMD)モジュールの表記があります。Angular 4.x(Angular Cli)アプリケーションでRequireJS(AMD)モジュールをインポートするには?

define('mymodule', [], function(){ 

    // ... bla bla bla 

    return { 
     calculate: function() { return 1 + 1; } 
    }; 
}); 

私はそれゆえ、RequireJSを使用して、別の(レガシー)プロジェクトからこのファイルをインポートしています - を私がすることはできません使用されたモジュール定義を変更してください

TypeScriptで書かれたAngular Cli(Angular 4.x)アプリでインポートします。

角度CLIは、プロジェクトをビルドするためにWebPACKの2を使用してAMDをサポートしている、私はこのようにそれをインポートすることができます思ったので:

import * as MyModule from './mymodule.js'; 

...しかし、それは働いていない、それはmymodule.jsがあるというエラーをトリガモジュールではありません。

このレガシーモジュールをインポートするにはどのようなアイデア(または回避策)が必要ですか?

答えて

8

amdモジュールをロードできます。

import * as MyModule from './mymodule.js'; 

console.log('my value is', MyModule.value); 

mymodule.jsファイル:ここ

はTSです
define(["require", "exports"], function(require, exports){ 
    exports.value = "aaa"; 
}); 

とtsconfig.jsで

"allowJs": true 

UPDATE:

webpackが提供するSystem.importを使用できます。

declare var System: any; 

System.import('./mymodule.js') 
    .then(MyModule=>console.log(MyModule.value)); 
+0

'mymodule.js'ファイルは、この' exports'が注入されたときやパブリックモジュールのメソッド(値)は、このように定義されているとき、それは確かに動作します: 'exports.valueは=「AAA」を;'しかし、私のユースケースは異なります。私の 'mymodule.js'ファイルは異なるロジックを持っています。 'define'ステートメントは、' exports'の注入が不足していて、単純にパブリックモジュールのメソッド(または値)を返します。あなたが私の 'mymodule.js'でロジック/構造を変更することなくそれをインポートすることができれば、何か提案がありますか(悲しいことに、それは私が対処する必要がある主な要件です)? –

+0

これはmodulesという名前で、なぜ動作しないのかわかりません。 System.import( './ mymodule.js')を実行してください。次に(x => console.log(x)); –

+0

残念ながら、これはうまくいきません。型スクリプトエラー: '名前が見つかりません 'システム' –

関連する問題