【发布时间】:2016-04-28 12:05:34
【问题描述】:
在编写 Typescripts 应用程序时,我使用 RequireJS 加载模块(我使用 Visual Studio 2015)。
我可以轻松地从我自己编写的 .ts 类中加载几乎所有模块,使用它们键入的 .d.ts 文件从外部库中加载。
但我的问题从我想为 jquery 加载插件的地方开始。
我正在使用库的类型文件,但逻辑上 .d.ts 文件中没有模块定义,因为它只是 jquery 的插件。
我已经遵循了从RequireJS website 加载 shim 库的建议,如下所示:
requirejs.config({
baseUrl: "Scripts",
paths: {
"jquery": "jquery-2.2.3",
"jquery.pjax": "jquery.pjax"
},
shim:
{
"jquery.pjax":
{
deps: ["jquery"],
exports: "jQuery.fn.pjax"
}
}
});
require(["app"]);
shim 配置仅设置代码关系。要加载属于或使用 shim 配置的模块,需要正常的 require/define 调用。单独设置 shim 不会触发代码加载。
现在,以下两种方法都不能加载插件(即使将 jquery.pjax.d.t 移动到 jquery.pjax.js 旁边):
import * as pjax from "jquery.pjax";
import pjax = require("jquery.pjax");
import pjax = require("./jquery.pjax");
import pjax = require("jquery.pjax.js");
import pjax = require("./jquery.pjax.js");
编译器报错Cannot find module "jquery.pjax" 或File C:/foo/bar/jquery.pjax.d.ts is not a module。
只要存在上述任何代码,app.ts 就不会被编译,当我删除它们时,插件不会被加载。
关于我在 app.ts 文件中使用了多个导入并且还会有更多导入,我更喜欢使用 import Foo = require("foo") 或 import * as Foo from "foo" 模块加载样式,而不是手动编写 AMD 定义函数。
我也在使用 Nuget 包管理,我不喜欢手动编辑/移动外部 .d.ts 或 .js 文件。
谁能帮我解决这个问题?
【问题讨论】:
标签: typescript requirejs