如何使用ThreeJS Collada loader与TypeScript / Angular CLI?

我有三个安装在:

node_modules/three 

我有Collada加载器安装在:

 node_modules/three-collada-loader 

types似乎已经包括Collada装载机的types:

 node_modules/@types/three/three-colladaLoader.d.ts 

我导入三个这样的,它的工作原理:

 import * as THREE from 'three'; 

问题是,当我试图使用Collada加载器时,我得到:

 WARNING in ./src/app/renderer.directive.ts 23:26-45 "export 'ColladaLoader' (imported as 'THREE') was not found in 'three' webpack: Compiled with warnings. 

这是ng serve命令的输出。

我像这样实例化了加载器:

 private loader: THREE.ColladaLoader = new THREE.ColladaLoader(); 

我应该如何使用/导入加载程序,因为它在types相同的三个命名空间,但它是一个不同的NPM模块?

编辑:

作为解决方法,我可以使用加载器,而不需要类似这样的代码:

 var loader = require('three-collada-loader')(THREE); 

有同样的问题,不幸的是我没有保留Typescripttypes支持的解决scheme。

然而,我使用下面的解决方法,它允许我用angular2,threejs和位于threejs的示例文件夹中的threejs helper模块进行开发。

首先像你那样在npm上安装threejs。

 npm install three --save 

您不需要安装three-collada-loader,因为它是作为threejs库的示例文件夹的一部分下载的。

然后,我将脚本声明中所需的脚本添加到angular-cli.json文件中。

 ... "styles": [ "../node_modules/bootstrap/dist/css/bootstrap.min.css", "assets/styles/main.scss", "styles.css" ], "scripts": [ "../node_modules/three/build/three.js", "../node_modules/three/examples/js/loaders/STLLoader.js", "../node_modules/three/examples/js/controls/TrackballControls.js" ], ... 

我可以直接从npm模块文件夹中引用threejs。 请确保先导入threejs主库,然后再插入模块。 在我的情况下,我添加了STLLoader.js和TrackballControlls.js。 你的装载机应该位于:

 ../node_modules/three/examples/js/loaders/ColladaLoader.js 

Webpack将加载Threejs及其模块,并将其添加到全局名称空间中。

为了沉默你的IDE和Typescript编译器,你可以在你使用threejs的文件中声明THREE。

 import { EventEmitter } from '@angular/core'; declare var THREE : any; export class RenderService { ... 

您可能需要使用“ng serve”重新启动您的开发服务器,才能使webpack包含您添加的脚本。

我希望这有帮助,有人find一个方法来使用Threejs的例子模块与完整的打字稿支持。