5

Visual Studio2012Ultimateを使用してTypeScriptから始めています。コンパイラコマンドに--moduleamdタグを含めてMSBuildを変更しました。コンパイラはAMDモジュールの生成を開始しました。

プロジェクトにNugetパッケージのRequireJSを含め、メインのHTMLに次の行を含めました。

<script type="text/javascript" data-main="scripts/SiteMaster"  src="scripts/require.min.js"></script>

SiteMasterとAuthenticateの2つのモジュールがあります。モジュールSiteMasterは単純です:

export module SiteMaster {
    import auth = module("Authenticate");
    auth.Authenticate.run();
}

Authenticateモジュールをインポートし、関数run()を呼び出すだけです。SiteMasterのjsは次のようになります。

define(["require", "exports"], function(require, exports) {
(function (SiteMaster) {
    var auth = __auth__;

    auth.Authenticate.run();
})(exports.SiteMaster || (exports.SiteMaster = {}));

})

問題は、ソリューションを参照するとエラーが発生することです。

Microsoft JScript runtime error: '__auth__' is undefined

どうすればこの問題を解決できますか?

前もって感謝します。

4

2 に答える 2

5

これをmvbaffaに持ってきてくれてありがとう!

SiteMaster.tsを次のように変更した場合のValentinのサンプル:

import auth = module("Authenticate");
export module SiteMaster {
    auth.Authenticate.run();
}

importステートメントをモジュール宣言から移動することにより、正しいjsコードが生成されます。TypeScript codeplexサイトでバグを開き、これが修正されることを確認します。これがブロッキングの問題である場合は、現在のコンパイラ[v0.8]で回避策を実行できます。

于 2012-10-06T21:51:17.967 に答える
4

これはコンパイラのエラーであると私はかなり確信しています。次のソースファイルを使用して問題を再現しました。

Authenticate.ts

export var Authenticate = { 
    run : function() {
        console.log("Run!");
    }
}

SiteMaster.ts

export module SiteMaster {
    import auth = module("Authenticate");
    auth.Authenticate.run();
}

test.html

<html>
    <head>
        <script type="text/javascript" data-main="SiteMaster"  src="http://requirejs.org/docs/release/2.1.0/minified/require.js"></script>
    </head>
    <body>
        <p>Test</p>
    </body>
</html>

私はタイプスクリプトを使用してコンパイルします

tsc --module amd SiteMaster.ts Authenticate.ts

FirefoxでFirebugを使用して開くとtest.html、次のエラーが発生します。

ReferenceError: __auth__ is not defined
var auth = __auth__;

のコンパイル済みコードはSiteMaster.js次のようになります。

define(["require", "exports"], function(require, exports) {
    (function (SiteMaster) {
        var auth = __auth__;

        auth.Authenticate.run();
    })(exports.SiteMaster || (exports.SiteMaster = {}));

})

TypeScriptの言語仕様セクション9.4.3AMDモジュールから判断すると、次のようなものが期待できます。

define(["require", "exports", "authenticate"], function(require, exports, authenticateModule) {
    (function (SiteMaster) {
        var auth = authenticateModule;

        auth.Authenticate.run();
    })(exports.SiteMaster || (exports.SiteMaster = {}));

})

これは、言語仕様の例と一致しています。他の人が同意する場合は、TypeScriptチームにバグを提出する可能性があります。

于 2012-10-06T20:10:18.687 に答える