我正在尝试按照Aurelia主页here上的视频教程设置一个基本的Aurelia项目。我想我已经按照视频中给出的确切步骤(刚刚将ES6更改为Typescript)。
当我尝试通过执行au run --watch
来运行应用时,它给了我这个错误:
ReferenceError: define is not defined
at Object.<anonymous> (/aurelia_project/tasks/build.js:1:63)
进一步调查,当我打开aurelia_project
目录时,我发现所有.ts
个文件都填充了cannot find module
个错误。例如,
[ts] Cannot find module 'gulp'.
[ts] Cannot find module 'aurelia-cli'.
依旧......
我是否必须执行typescript cli
解决这些模块的额外步骤?
如果有帮助,这是tsconfig.json
:
{
"compileOnSave": false,
"compilerOptions": {
"sourceMap": true,
"target": "es5",
"module": "amd",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"lib": ["es2015", "dom"]
},
"exclude": [
"node_modules",
"aurelia_project"
],
"filesGlob": [
"./src/**/*.ts",
"./test/**/*.ts",
"./typings/index.d.ts",
"./custom_typings/**/*.d.ts"
],
"atom": {
"rewriteTsconfig": false
}
}
答案 0 :(得分:2)
删除*.js
内的所有aurelia_json/tasks
个文件。然后重复au run --watch
。
为什么呢?您错误地将aurelia_json/tasks
TypeScript转换为JavaScript,您不想这样做,因为Aurelia CLI使用gulp-typescript
。删除*.js
内的所有aurelia_json/tasks
个文件,您就可以了。
问题与类型定义无关。正如Meirion Hughes评论的那样,TypeScript编译器在没有它们的情况下工作。
答案 1 :(得分:1)
使用带有TypeScript的外部库时有几个选项。一种选择是导入给定库的定义(.d.ts)文件。有很多方法可以做到这一点。我个人更喜欢使用打字(npm i typings -g
)。
全局安装打字后,您可以运行以下命令:
typings search <LIBRARY_NAME>
这将为您提供搜索匹配列表。选择您想要的库以及从哪个源下载它。大多数将来自dt(DefinitelyTyped)。然后运行以下命令:
typings install <SOURCE>~<LIBRARY_NAME> --global
E.g。
typings install dt~react --global
全局标志告诉typings将定义文件安装到项目的全局目录中(因此各种类型都可以访问)。
现在TypeScript应该停止抱怨,不仅如此,你将拥有所有外部库的丰富intellisense(不再在浏览器和编辑器之间来回浏览,因为你已经忘记了api)。
您可以自己找到定义文件(通常可以从DefinitelyTyped存储库获得),只需将其复制到项目中,如果您真的不想因某种原因使用打字机。
另一个选项,实际上只有在库的定义文件不存在的情况下才能使用,是在项目的某个地方声明自己的定义文件并将以下内容放在文件中:
declare module '<MODULE_NAME>' {
let <LIBRARY_NAME>: any;
export default <LIBRARY_NAME>;
}
这告诉TypeScript MODULE_NAME存在,所以停止抱怨,并导出LIBRARY_NAME,其类型为默认值。当然,使用这种方法,您将无法获得与您的库的任何智能感知。
当然,最后一个选项是自己创建定义文件(如果不存在),然后将其贡献给DefinitelyTyped。我相信我会非常感激:)
希望有所帮助。