注:下記の解決策は機能しますが、情報の一部が間違っています。コメントの下の議論を見てください。
まず、TypeScriptはJSファイルについて何も知らない。彼らはそれらをどのように作り出すのかは知っていますが、それらをコンパイルする方法はわかりません。だからあなたは実際にどのようにして得たか分からない
import {createPlatform } from './node_modules/@angular/core/bundles/core.umd.js';
あなたのTypeScriptコードでコンパイルする。
活字体が既にnode_modules
で見ているので、私たちは、活字体で
import {createPlatform } from '@angular/core';
を行うことができます。 @angular/core
の場合、node_module
の内部には@angular/core
というディレクトリがあり、index.d.ts
というファイルがあります。これは私たちのTypeScriptコードがJSファイルではなくコンパイルするファイルです。 JSファイル(上記の最初のコードスニペットのもの)は、実行時にのみ使用されます。 TypeScriptはそのファイルについて何も知らないはずです。上述した第2のスニペット、活字体はJSにコンパイルされたとき、それはランタイムとして
var createPlatform = require('@angular/core').createPlatform;
のように見えるの使い方
、SystemJSはのにこれを見る、そしてmap
の構成を見て、絶対ファイルへ@angular/core
をマップそのファイルをロードすることができます。
'@angular/core': 'npm:@angular/core/bundles/core.umd.js'
これは、ng-bootstrapに従うパターンです。それはあなたがnode_modules/@ng-bootstrap/ng-bootstrap
ディレクトリに見れば、あなたはindex.d.ts
ファイルが表示されるはずです
import { ... } from '@ng-bootstrap/ng-bootstrap';
をコンパイルすることができるように、活字体定義ファイルを指すのインポートを使用してください。これは、TypeScriptがコンパイルに使用するものです。それはJSにコンパイルされたとき、それは
var something = require('@ng-bootstrap/ng-bootstrap').something;
そしてSystemJSの設定で、次のコンパイルされ、私たちは、そうでない場合SystemJSがそれを解決する方法を知ることができません、モジュールファイルの絶対パスに@ng-bootstrap/ng-bootstrap
をマップする必要があります。
'@ng-bootstrap/ng-bootstrap': 'npm:@ng-bootstrap/ng-bootstrap/bundles/ng-bootstrap.js'
これからの重要なことの1つは、コンパイル時と実行時の違いを理解することです。コンパイルタイプはTypeScriptです。これはランタイムファイルなので、JSファイルについては何も知りません。 SystemJSは、ランタイム(JS)ファイルについて知っておく必要があるものです。
あなたの答えは、最初と最後を除いてほぼ正しいです。 '' allowJs ":trueを指定すると、typescriptはそのようなインポートをJavaScriptファイルに直接解決しますが、' .d.ts'と '.ts'ファイルがあればそれを優先します。 –
@AluanHaddad私はすべてを知っているとは思わない:-) –
@AluanHaddad私は、JSファイルをインポートするとコンパイル時の入力が遅くなると思っています。あれは正しいですか? –