打字稿AMD模块错误(模块尚未加载上下文)

时间:2014-02-12 12:00:13

标签: typescript amd

我有以下的Typescript文件

/// <reference path="../../_references.ts" />
var app = require("modules/app");
var spactrl = require("controllers/spactrl");

var main = function (app: ng.IModule) {
    app.config(function ($routeProvider: ng.route.IRouteProvider) {
        $routeProvider.when("/", { controller: "HomeCtrl", templateUrl:"/spa/template/greet" });
    });
}
export = main;

但是当我把它编译成AMD时,我得到了这个输出

define(["require", "exports"], function(require, exports) {
    /// <reference path="../../_references.ts" />
    var app = require("modules/app");
    var spactrl = require("controllers/spactrl");

    var main = function (app) {
        app.config(function ($routeProvider) {
            $routeProvider.when("/", { controller: "HomeCtrl", templateUrl: "/spa/template/greet" });
        });
    };

    return main;
});
//# sourceMappingURL=main.js.map

这导致错误'模块名称“modules / app”尚未加载上下文:_'

浏览requirejs的文档http://requirejs.org/docs/errors.html#notloaded

看起来生成的文件应该具有我所需的“modules / app”或者一起摆脱依赖数组。

有解决方法吗?或者我做错了什么?

2 个答案:

答案 0 :(得分:2)

我浏览了你的代码,你试图通过require调用加载js模块。例如。 :

https://github.com/odytrice/RequireAngular/blob/dev/RequireAngular/Scripts/app/modules/app.ts

require("angular-route");
require("angular-resource");
require("angular-animate");

这不起作用,因为TypeScript不知道这些需要的调用,也无法将其添加到define部分。要告诉打字稿,您需要使用/// <amd-dependency

PS:我有关于这个主题的视频:http://www.youtube.com/watch?v=4AGQpv0MKsA&hd=1

答案 1 :(得分:0)

在TypeScript中使用AMD模块的常用方法是使用import语句,如下所示:

import ng = require("pathto/ng");
import app = require("modules/app");
import spactrl = require("controllers/spactrl");

var main = function (app: ng.IModule) {
    app.config(function ($routeProvider: ng.route.IRouteProvider) {
        $routeProvider.when("/", { controller: "HomeCtrl", templateUrl:"/spa/template/greet" });
    });
}
export = main;

当您使用--module amd标志进行编译时,它会生成嵌套的require调用,并将您的代码放在内部作为回调。