2012-10-22 166 views
4

我有以下指向backbone.d.ts定義。TypeScript,RequireJS墊片,環境模塊聲明

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而不是相對路徑。除了後期構建過程以外,是否還有任何解決方法來操作定義?

回答

3

我認爲這個問題的解決方案是把環境聲明放在最終的真實模塊的相同位置,所以你可以用相同的路徑引用它。

所以backbone.d.ts需要在相同的位置backbone.js

+0

它在相同的位置,但墊片照顧我的出口和依賴關係,而無需使真正的backbone.js成爲amd-ified模塊。 – ryan

1

而不是使用相對路徑,我總是使用根路徑。像這樣的:

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

和黑客是你可以在你的墊片中定義相同的名稱。事情是這樣的:

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

通過使用總是從根目錄的路徑,該路徑保持,如果你是使用相對路徑,而不是相同的。這是一個黑客攻擊,但它適用於我(GitHub)。

0

我剛剛在how to use AMD modules in TypeScript上放了個博客。

首先,只使用一個參考路徑,以骨幹如下:

/// <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(); 
}); 

一旦應用匹配的代碼的需要塊,主鏈是全局定義。
玩得開心,

相關問題