1. ホーム
  2. javascript

[解決済み] Uncaught ReferenceError: define is not defined typescript

2022-01-31 22:56:04

質問

私はtypescript、knockout、requirejsの初心者です。私はこれらのファイルを使っていくつかのデモを作成しました。今、私はtypescriptとknockoutjsを使用していくつかのマイナーなロジックを実装したいと考えています。

私は4-5個のtypescriptファイルを作成し、それらは内部でインポートされています。htmlファイルを実行するとき。タイトルのようなエラーが表示されます。

このエラーについて誰か助けてください。このコードで何が欠けているのでしょうか。

Googleで検索し、かなりの時間を費やしましたが、適切な解決策を見つけることができませんでした。それは、すべてのモジュールを定義するためにrequireJSに関連している必要があります。しかし、requireJSの初心者として、それに追いつくことができません。私はまた、同様のエラーのためにstackoverflowを検索しましたが、それは私を助けることはありません。

解決策を待っています。

どのように解決するのですか?

ここで、あなたのTypeScriptは楽しくコンパイルされ、動作するコードになりました。 requireJS 環境で (厳密には AMD 環境)になります。つまり、define/requireなどがすべてすでに存在していることを前提とした出力を生成してしまうのです。

全体的な答えは、コンパイルされたコードに依存する前に、RequireJSをインクルードする必要があるということです。

このエラーは、あなたが別の間違いを犯していることを示唆しています。 <script src="my-compiled-code.js"></script> タグを使用しています。) それはrequireモジュールの仕組みではありません。その代わり、RequireJS を利用できるようにしたら、トップレベルの起動スクリプト(HTML にインラインで記述するか、別のファイルとして記述するか)をひとつ用意し、RequireJS を設定して require() をアプリケーションのトップレベルのファイルにして、すべてをスタートさせます。このファイルは、手で読み込むか、RequireJS の "data-main" 属性を使用して読み込むことができます。

例えば、最小限のHTMLは次のようなものです。

<!DOCTYPE html>
<html>
    <head>
        <script data-main="scripts/main" src="scripts/require.js"></script>
    </head>
    <body>
    </body>
</html>

これは、RequireJS を 'scripts/require.js' からロードし、スクリプトを 'scripts/main.js' にロードしてロード処理を開始するように指示します(おそらく両方のパスを更新したいと思うでしょう - data-main には .js 拡張子は必要ないことに注意してください)。

メインスクリプトは、次のような非常にシンプルなものでなければなりません。

// Set up any config you need (you might not need this)
requirejs.config({
  basePath: "/scripts"
});

// Tell RequireJS to load your main module (and its dependencies)
require("mainmodule");

一般的に、あなたがここで戦っているのはTypeScriptの問題ではなく、RequireJSの問題なのです。Requireだけでもう少し時間をかけて遊んでみて(たぶん純粋なJavaScriptで、より明確に)、そのための作業例を見て、まずその部分が動くようになってから、残りの部分を追加していくのがいいと思います。