4

我有以下指向backbone.d.ts 定义的内容。

import Backbone = module("../../../dep/backbone/backbone");

export class Codebook extends Backbone.Model {

    defaults() {
        return {
            id: -1,
            title: -1
        }
    }

    initialize() {
        // do nothing
    }

}

--module amd它生成以下内容。

define(["require", "exports", "../../../dep/backbone/backbone"], function(require, exports, __Backbone__) {

由于全局原因,我已经用我的 RequireJS 配置文件填充了主干。我希望我的定义只是说backbone而不是相对路径。除了后期构建过程来操纵定义之外,还有其他解决方法吗?

4

3 回答 3

3

我认为解决这个问题的方法是将环境声明放在与最终真实模块相同的位置,以便您可以使用相同的路径引用它。

所以backbone.d.ts需要和backbone.js.

于 2012-10-22T15:46:38.707 回答
1

我总是使用根路径,而不是使用相对路径。就像是:

import underscore = module('libs/underscore/underscore');

hack 是你可以在你的 shim 中定义相同的名称。像这样的东西:

require.config({
    paths: {
        'libs/underscore/underscore': 'libs/underscore/underscore'
    },
    shim: {
        'libs/underscore/underscore': {
            exports: '_'
        }
    }
});

通过始终使用从根开始的路径,路径保持不变,就像您使用相对路径一样。这是一个 hack,但它对我有用(GitHub)。

于 2012-10-23T00:52:23.973 回答
0

我刚刚整理了一篇关于如何在 TypeScript 中使用 AMD 模块的博客。

首先,只需使用主干的参考路径,如下所示:

/// <reference path="../../modules/Backbone.d.ts" />

然后在没有导入的情况下定义您的类:

export class MTodoCollectionView extends Backbone.View {
...
}

然后是你的 require.config 和 apploader:

require.config({
    baseUrl: '../',
    paths: {
        'underscore': 'lib/underscore',
        'backbone': 'lib/backbone'
    }, 
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        }
    }
});

require(['jquery','underscore','backbone','console','app/AppMain', 
     ], 
    ($, _, Backbone, console, main) => {
    // code from window.onload
    var appMain = new main.AppMain();
    appMain.run();
});

一旦应用程序遇到了 require 代码块,Backbone 就会被全局定义。
玩得开心,

于 2012-10-23T14:55:39.283 回答