Typescript 找不到已与 SystemJS 映射的模块
Typescript can't find a module that has been mapped with SystemJS
Typescript 在此导入中找不到模块 import ga from 'googleAnalytics';
SystemJS 知道在哪里可以找到模块,因为它已经像这样预先映射:
map: {
'@angular': 'node_modules/@angular',
'rxjs': 'node_modules/rxjs',
'underscore': 'node_modules/underscore/underscore-min.js',
'googleAnalytics': '//www.google-analytics.com/analytics.js'
},
如何提供与 tsc
类似的映射?
另一个问题似乎指向了一个好的方向:
Typescript 2.0 似乎支持 tsconfig.json
的 paths
配置。有没有办法下载Typescript 2.0?我可以像 SystemJS 一样给 path
配置一个 http url (//www.google-analytics.com/analytics.js) 吗?如果没有办法下载Typescript 2.0,我现在的版本如何实现我想要的?
编辑
我得到的具体错误是:"Cannot find module 'ga'".
这是我的 tsconfig.json
:
{
"compilerOptions": {
"rootDir": "./",
"target": "es5",
"module": "system",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noImplicitAny": true
},
"exclude": [
"node_modules",
"front-end/node_modules",
"typings/main",
"typings/main.d.ts"
]
}
这个问题可以通过 Typescript Type Definitions 解决。
要使用定义:
- 将类型定义放在您的目录中。预制的由 DefinitelyTyped.
提供
将这一行添加到需要导入的.ts文件中Google分析:
/// <reference path="ga.d.ts" />
更新
当我 运行 tsc
时,它确实对我有用。对不起我忘了补充:
- 在您的
import
和 SystemJS 映射中重构为 ga
。
这不会让编译器知道它需要检查 SystemJS 文件,而只是充当您导入的模块的占位符,这样就不会抛出错误,我们可以在运行时实际解析模块SystemJS.
我猜你明白,在 typescript 编译的情况下,transpiler 正在寻找明确类型的文件。他需要知道外部模块的类型定义。如果你有活动的 nodejs 模块解析(你有)并且你使用非相对路径(你有)你必须添加到你的项目 node_modules 目录(也许你已经有一个)并到这个目录添加 googleAnalytics.d.ts 文件,或者您可以创建 node_modules/googleAnalytics 目录,然后在其中添加 index.d.ts。 google 分析的定义类型可以从 DefintelyTyped repository
下载
有关模块分辨率的更多信息here
编辑:根据您的评论,您可能必须将模块导出添加到 google 定义文件
declare module 'googleAnalytics' {
export = UniversalAnalytics;
}
Typescript 在此导入中找不到模块 import ga from 'googleAnalytics';
SystemJS 知道在哪里可以找到模块,因为它已经像这样预先映射:
map: {
'@angular': 'node_modules/@angular',
'rxjs': 'node_modules/rxjs',
'underscore': 'node_modules/underscore/underscore-min.js',
'googleAnalytics': '//www.google-analytics.com/analytics.js'
},
如何提供与 tsc
类似的映射?
另一个问题似乎指向了一个好的方向:
Typescript 2.0 似乎支持 tsconfig.json
的 paths
配置。有没有办法下载Typescript 2.0?我可以像 SystemJS 一样给 path
配置一个 http url (//www.google-analytics.com/analytics.js) 吗?如果没有办法下载Typescript 2.0,我现在的版本如何实现我想要的?
编辑
我得到的具体错误是:"Cannot find module 'ga'".
这是我的 tsconfig.json
:
{
"compilerOptions": {
"rootDir": "./",
"target": "es5",
"module": "system",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noImplicitAny": true
},
"exclude": [
"node_modules",
"front-end/node_modules",
"typings/main",
"typings/main.d.ts"
]
}
这个问题可以通过 Typescript Type Definitions 解决。
要使用定义:
- 将类型定义放在您的目录中。预制的由 DefinitelyTyped. 提供
将这一行添加到需要导入的.ts文件中Google分析:
/// <reference path="ga.d.ts" />
更新
当我 运行 tsc
时,它确实对我有用。对不起我忘了补充:
- 在您的
import
和 SystemJS 映射中重构为ga
。
这不会让编译器知道它需要检查 SystemJS 文件,而只是充当您导入的模块的占位符,这样就不会抛出错误,我们可以在运行时实际解析模块SystemJS.
我猜你明白,在 typescript 编译的情况下,transpiler 正在寻找明确类型的文件。他需要知道外部模块的类型定义。如果你有活动的 nodejs 模块解析(你有)并且你使用非相对路径(你有)你必须添加到你的项目 node_modules 目录(也许你已经有一个)并到这个目录添加 googleAnalytics.d.ts 文件,或者您可以创建 node_modules/googleAnalytics 目录,然后在其中添加 index.d.ts。 google 分析的定义类型可以从 DefintelyTyped repository
下载有关模块分辨率的更多信息here
编辑:根据您的评论,您可能必须将模块导出添加到 google 定义文件
declare module 'googleAnalytics' {
export = UniversalAnalytics;
}