簡體   English   中英

TypeScript,RequireJS shim,環境模塊聲明

[英]TypeScript, RequireJS shim, ambient module declaration

我有以下內容指向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而不是相對路徑。 除了構建后的過程之外,還有任何解決方法來操作定義嗎?

我認為這個問題的解決方案是將環境聲明放在與最終實際模塊相同的位置,這樣您就可以使用相同的路徑引用它。

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

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

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

而黑客就是你可以在你的墊片中定義相同的名稱。 像這樣的東西:

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

通過始終使用來自根的路徑,路徑保持相同,就像使用相對路徑一樣。 這是一個黑客,但它適用於我( GitHub )。

我剛剛整理了一篇關於如何在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就會被全局定義。
玩得開心,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM