Хорошо, я читал много вопросов и ответов об этом, и многое из этого было мусором.
У меня очень простой вопрос. Как сделать эквивалент этого:
require.config({
paths: {
"blah": '/libs/blah/blah',
}
});
require(['blah'], function(b) {
console.log(b);
});
В typescript?
Это не работает:
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, но вывод:
define(["require", "exports", 'blah'], function(require, exports, b) {
require.config({
paths: {
"blah": '/libs/blah/blah'
}
});
console.log(b);
});
Похоже, что это может сработать, но на самом деле нет, require.config находится внутри блока require, он устанавливается после того, как он уже нужен.
SO! До сих пор я оказался в качестве решения:
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 на верхнем уровне, чтобы импортированные пути для разных именованных модулей были правильными.
(... и это связано с тем, что в основном зависимости сторонних сторон разрешаются с помощью bower и установлены в /lib/blah, где, поскольку файлы прокладки, которые у меня есть для их определений, находятся в файле src/deps/blah.d.ts, поэтому пути импорта по умолчанию неверны после перемещения сгенерированных файлов модулей в/js/на сайте)
NB. Я упомянул jquery здесь, но проблема заключается не в том, что jquery не работает как модуль AMD; Для этого у меня есть файл shim jquery.ts.d. Здесь речь идет о пути requirejs.