无法解析模块功能的依赖关系 (restangular.IProvider)
Can't resolve dependency for module function (restangular.IProvider)
我正在尝试为 SPA 项目设置 restangular,但我无法将其作为 grunt-tsng 的依赖项来解决。我已经使用 bower(以及来自 definitelyTyped 的 typescript 定义的 tsd)安装了它。
grunt 任务配置
tsng: {
options: {
extension: ".ng.ts"
},
dev: {
files: [
// TODO: Automate the generation of this config based on convention
{
src: ["Client/app/**/*.ts", "!**/*.ng.ts"],
dest: "Client/app"
}
]
}
},
模块app.ts
/// <reference path="../../typings/tsd.d.ts" />
module App {
var dependencies = [
"ui.router",
"ui.bootstrap",
"restangular"
...
];
function configuration(
$stateProvider: ng.ui.IStateProvider,
$urlRouterProvider: ng.ui.IUrlRouterProvider,
RestangularProvider: restangular.IProvider, <-- here it fails
...
ts.d.ts(参考文件)
/// <reference path="restangular/restangular.d.ts" />
咕噜声错误
Running "tsng:dev" (tsng) task
Warning: Error: Can't resolve dependency for module function App.config with name restangular.IProvider Use --force to continue.
其他依赖,如ui-router、ui-bootstrap等. 工作正常。这可能是什么原因造成的? grunt-tsng 是否存在已知的不兼容性?
好的,我明白了。
当执行 grunt-tsng 时,它会扫描所有 dependencies/modules 等并自动将它们挂接到 angular 中,因此您不必自己做。这里有两个简单的规则适用:您自己的要注入的依赖项(例如,在您有打字稿执行代码的地方,例如模块中的 类 )可以简单地用它们的名称来定义。例如:
constructor(service: MyModule.IMyService) {}
外部依赖,例如from angular 本身是用“$”符号声明的。 grunt-tsng 将假定它们的依赖项本身在运行时已解决,因此只需将它们与它们的名称挂钩:
constructor($routeProvider: ng.IRouteService) {}
但现在 restangular 中的服务不再命名为“$restangular”,而只是 'restangular'。这导致以下结果:
- 将其声明为 'restangular' 时,grunt-tsng 将在您的模块中查找实现,未找到并失败
- 将其声明为“$restangular”时,angular 将查找名为“$restangular”的提供程序,但未找到并失败
结论:
这是智障。
我正在尝试为 SPA 项目设置 restangular,但我无法将其作为 grunt-tsng 的依赖项来解决。我已经使用 bower(以及来自 definitelyTyped 的 typescript 定义的 tsd)安装了它。
grunt 任务配置
tsng: {
options: {
extension: ".ng.ts"
},
dev: {
files: [
// TODO: Automate the generation of this config based on convention
{
src: ["Client/app/**/*.ts", "!**/*.ng.ts"],
dest: "Client/app"
}
]
}
},
模块app.ts
/// <reference path="../../typings/tsd.d.ts" />
module App {
var dependencies = [
"ui.router",
"ui.bootstrap",
"restangular"
...
];
function configuration(
$stateProvider: ng.ui.IStateProvider,
$urlRouterProvider: ng.ui.IUrlRouterProvider,
RestangularProvider: restangular.IProvider, <-- here it fails
...
ts.d.ts(参考文件)
/// <reference path="restangular/restangular.d.ts" />
咕噜声错误
Running "tsng:dev" (tsng) task
Warning: Error: Can't resolve dependency for module function App.config with name restangular.IProvider Use --force to continue.
其他依赖,如ui-router、ui-bootstrap等. 工作正常。这可能是什么原因造成的? grunt-tsng 是否存在已知的不兼容性?
好的,我明白了。
当执行 grunt-tsng 时,它会扫描所有 dependencies/modules 等并自动将它们挂接到 angular 中,因此您不必自己做。这里有两个简单的规则适用:您自己的要注入的依赖项(例如,在您有打字稿执行代码的地方,例如模块中的 类 )可以简单地用它们的名称来定义。例如:
constructor(service: MyModule.IMyService) {}
外部依赖,例如from angular 本身是用“$”符号声明的。 grunt-tsng 将假定它们的依赖项本身在运行时已解决,因此只需将它们与它们的名称挂钩:
constructor($routeProvider: ng.IRouteService) {}
但现在 restangular 中的服务不再命名为“$restangular”,而只是 'restangular'。这导致以下结果:
- 将其声明为 'restangular' 时,grunt-tsng 将在您的模块中查找实现,未找到并失败
- 将其声明为“$restangular”时,angular 将查找名为“$restangular”的提供程序,但未找到并失败
结论:
这是智障。