从Uri导入TypeScript模块

16

在TypeScript中,是否可以从URI导入模块或引用定义文件?

我们的应用程序使用RequireJS,并希望从CDN提供一些定义文件和TypeScript(或生成的JavaScript)文件,而不是直接将它们全部包含在我们的项目中。

引用定义文件
在TypeScript中,我们可以这样引用定义文件:

/// <reference path="jquery-1.8.3.d.ts" />

然而,我们想要做的是这样的:

/// <reference path="https://github.com/borisyankov/DefinitelyTyped/raw/master/jquery/jquery-1.8.d.ts" />

export class UsesSomethingFromJQuery {

    TestMethod(element: JQuery) {
        // Do something with the supplied element
    }

}

注意:我不打算使用Boris的GitHub链接作为CDN。我使用了这个链接来演示这个概念。

导入TypeScript文件
我们还希望从一个常见的网站导入模块,像这样:

import OtherModule = module('http://some-internal-site/ts/other');

export class UsesSomethingFromOther {

    TestMethod(c: OtherModule.TestClass) {

    }

}

然而,当我提供一个模块的URI时,出现了“无效的导入路径”错误。

问题解决
我们有一组TypeScript文件,用于为我们的控件生成JavaScript、一些REST服务封装和其他实用程序。我们希望在其他Web应用程序中使用这些通用控件。

当我们有一个特定于其中一个网站的TypeScript文件(因此不是公共核心的一部分),依赖于在公共核心中定义的类时,我们希望使用URI引用该依赖项。因此就出现了上面的问题。

如果这些只是JavaScript源文件,我们将在内部CDN上托管它们并从那里进行引用,但是由于TypeScript编译步骤,我们遇到了问题。我们的方法是否有误?是否有更好的方法?


1
我认为它目前不支持此功能,您可以在http://typescript.codeplex.com/discussions上直接询问开发人员,并添加一个问题以尝试获得支持。 - BreeeZe
你为什么想从CDN提供定义文件?它们不是打包在你的构建中了吗? - thomaux
1
@Anzeo- 我们有一个中央内容站点,从中我们加载资源,这些资源被我们的主网站利用;如CSS、图片、脚本等等...我们希望定义文件也可以从这个站点上提供服务。 - Stuart Thompson
我明白了,有道理 :) 我还没有遇到解决方案,如果有的话我会通知的。 - thomaux
1
@Astronaut 我们最终使用NuGet作为软件包源,并使用Gulp将文件拉入本地源树,然后再执行TypeScript转译步骤。 - Stuart Thompson
显示剩余2条评论
1个回答

4

我认为从CDN服务器上提供JavaScript输出是个好主意,这会影响到你的模块加载器或脚本标签。但是,.d.ts文件在运行时不是必需的。

你可以调整这个使用TypeScript编写RequireJS和jQuery的例子,将文件远程加载,如下:

  1. 本地定义文件(.d.ts)
  2. 远程运行时文件,使用require.config

app.ts

///<reference path="require.d.ts" />
///<reference path="jquery.d.ts" />

require.config({
  paths: {
    'jquery' : 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min'
  }
});

require(['jquery'], function (jquery) {
    jquery(document).ready(() => {
        alert('Your code executes after jQuery has been loaded.');
    });
});

Steve,我认为OP想要从他们的私有CDN引用定义文件。 - thomaux
在这种情况下,我可以完全为此目的支持NuGet。 - Fenton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接