2017-12-11 23 views
0

単純なTypeScriptライブラリを作成し、異なるTypeScriptサンプルプロジェクト内からテストしようとしているので、AMDを含むさまざまなモジュール形式でTypeScriptからライブラリを使用できることを確認して示します。TypeScriptのTypeScriptライブラリを使用する

ライブラリのために、私はUMDコードにコンパイルしており、宣言ファイルとともにそれを "build"ディレクトリに出力します。これについては後でpackage.jsonファイルから参照してください。そのような:

tsconfig.json

{ 
    "compilerOptions": { 
     "module": "umd", 
     "outDir": "build", 
     "declaration": true, 
     ... 
    }, 
    ... 
} 

package.json

{ 
    "main": "build/index.js", 
    "types": "build/index.d.ts", 
    ... 
} 

これは、ライブラリが複数のファイルの化合物であることを言及する価値がある、とindex.jsことを単純に接着されますそれらの異なる部分を一緒にして、それらを単一のエントリーポイントを通して公開する。

サンプルプロジェクトの1つでは、私の目標はAMDコードにコンパイルし、RequireJSを使用して結果を理解することです。私はTypeScriptコードを書くことができます、コンパイラはすべてのインポートに満足しており、エディタ(VSコード)は自動補完を適切に提供します。ただし、コンパイルされたコードには、依存関係の1つである上記のライブラリのコードは含まれていません。また、ブラウザでコードを実行すると、RequireJSはライブラリをロードできません。ここでは、このプロジェクトが設定されている方法です。

tsconfig.json

これにより
{ 
    "compilerOptions": { 
     "module": "amd", 
     "outFile": "build/app.js" 
    }, 
    ... 
} 

index.htmlを

... 
    <script src="node_modules/requirejs/require.js"></script> 
    <script src="build/app.js"></script> 
    <script> 
     require(['main']) 
    </script> 
... 

、RequireJSは/ライブラリー」からライブラリをロードしようとしています-name.js "、もちろん存在しません。

私はどのように進むべきかについてはかなりわかりません。

答えて

2

RequireJSがライブラリを見つけるためには、RequireJS構成を提供する必要があります。どちらか、またはライブラリを、RequireJSがデフォルトで検索する場所に移動する必要があります。どちらも可能なオプションです。

require.config({ 
    paths: { 
    "library-name": "/node_modules/library-name/build/index", 
    }, 
}); 

私が想定しました:開発サーバーはおそらくlibrary-nameがインストールされているあなたの例のプロジェクトのためのnode_modulesを、提供するために発生した場合

はたとえば、あなたはこのような構成を使用することができますnode_modulesは、開発サーバーによって確立されたサイトのルートから提供されます。パス内に.jsという拡張子がない場合は間違いではありません.ExpitJSが追加するため、.jsを入力しないでください。

+0

はスーパーダムこのありませんか?つまり、TypeScriptはすべての情報を持っており、すべてを見つけることができますが、手動ですべてを再度接続する必要があります。 – DanielM

+0

いずれにしても、私はあなたのアイデアを試してみました。しかし、index.jsには './core/Component ';からの' export {Component}'などのものが含まれており、RequireJSはルートでそれを見つけることを試みています。つまり、存在しないファイル "/ core/Component .js "(そしてそれらのすべてに対して同じ)。 – DanielM

+0

TypeScriptは実際にはパッケージが実行時にどのように設定されているか知りませんし、使用しているローダーが分からない場合もあります。あなたはRequireJSを使用しているかもしれませんし、SystemJSを使用しているかもしれませんし、UMDかAMDをサポートしている他のローダーかもしれません。 TypeScriptプロジェクトといくつかの一般的な設定からRequireJS設定を生成するツールを書くことは可能ですが、AFAIKは誰もそれを行っていません。 2番目のコメントに表示される「輸出」の種類は、本質的に問題ではありません。私は大規模な図書館でそれをいつもしています。 TypeScriptはあなたの 'export'をAMDにどのように変換しますか? – Louis

0

他のものの中でこの他の質問の助けを借りて、私はそれを持っていると思う:RequireJS relative paths

だから、基本的に私はこのようにRequireJSを設定する必要がありました:私は唯一のインデックスファイルへのパスが含まれている場合、

require.config({ 
    packages: [{ 
     name: 'module-name', 
     location: 'node_modules/module-directory/build', 
     main: 'index' 
    }] 
}) 

それ以外の場合は、インデックスで使用されるすべての相対パスは、ルート、に関連して解決を取得されかなり愚かですが、OK ...

TypeScript(2.6.2)コンパイラのbaseUrlpathsオプションは役に立ちませんでした。実際、コンパイルされたコードはまったく同じに独立していましたそれらのフィールドが満たされているかどうか(私は、RequireJSがloadinを助けたのと同じ値をそれらのために使用しようとしましたgインデックスファイル)。

編集

誰かが興味を持っている場合は、ここで私はSystemJSと同じ場合に必要な設定は次のとおりです。

SystemJS.config({ 
    paths: { 
     'module-name': 'node_modules/module-directory/build/index' 
    }, 
    packages: { 
     '': { 
      defaultExtension: 'js' 
     } 
    } 
}) 
関連する問題