【发布时间】:2014-02-06 09:14:02
【问题描述】:
好的,我已经阅读了很多关于此的问题和答案,其中很多都是垃圾。
我有一个非常简单的问题。我该如何做相当于这个:
require.config({
paths: {
"blah": '/libs/blah/blah',
}
});
require(['blah'], function(b) {
console.log(b);
});
在打字稿中?
这不起作用:
declare var require;
require.config({
paths: {
"blah": '/libs/blah/blah',
}
});
import b = require('blah');
console.log(b);
s.ts(8,1): error TS2071: Unable to resolve external module ''blah''.
s.ts(8,1): error TS2072: Module cannot be aliased to a non-module type.
error TS5037: Cannot compile external modules unless the '--module' flag is provided.
使用 --module 标志编译,使用虚拟 blah.ts shim 编译,但输出为:
define(["require", "exports", 'blah'], function(require, exports, b) {
require.config({
paths: {
"blah": '/libs/blah/blah'
}
});
console.log(b);
});
看起来可能可行,但实际上不行,require.config 在 require 块中,它是在 它已经需要之后设置的。
所以!到目前为止,我已经以 this 作为解决方案:
class RequireJS {
private _r:any = window['require'];
public config(config:any):void {
this._r['config'](config);
}
public require(reqs:string[], callback:any):void {
this._r(reqs, callback);
}
}
var rjs = new RequireJS();
rjs.config({
paths: {
"jquery": '/libs/jquery/jquery',
"slider": '/js/blah/slider'
}
});
rjs.require(['slider'], function(slider) {
console.log(slider);
});
这看起来很糟糕。
所以要清楚,在相互依赖的模块内部,这种事情工作得非常好:
import $ = require('jquery');
export module blah {
...
}
我只需要一种正确的方法在顶层设置 requirejs 配置,以便各种命名模块的导入路径正确。
(...这主要是因为第 3 方依赖项是使用 bower 解决的,并安装在 /lib/blah 中,因为我为其定义所拥有的 shim 文件位于 src/deps/blah.d .ts,所以将生成的模块文件移动到站点上的/js/后默认导入路径不正确)
注意。我在这里提到了 jquery,但问题是 not jquery 不能作为 AMD 模块工作;我有一个垫片 jquery.ts.d 文件。这里的问题是 requirejs 路径。
【问题讨论】:
标签: requirejs typescript