我正在StencilJS应用程序中使用BabylonJS,而且似乎只能以非常特定的方式导入。
例如,我做不到:
import { Engine, Scene } from "babylonjs";
上面写着'Engine' is not exported by node_modules\babylonjs\babylon.js
但这是..
我可以做到:
import BABYLON from 'babylonjs';
并像
一样使用它private _scene: BABYLON.Scene;
我希望前者可以工作。有什么建议吗?
第一种方法是大多数教程的用法,我拒绝相信SencilJS不能做到这一点。我一定想念一些东西
答案 0 :(得分:4)
BabylonJS有两种版本(ES5和ES6)。您所指的问题与软件包的ES5版本有关。
如果您在代码中这样子
import * as babylon from 'babylonjs';
console.log(babylon);
并查看控制台,您将看到下一个:
{default: Module, __moduleExports: Module, babylonjs: undefined}
这就是为什么分解不起作用的原因,它不是可以按照您期望的方式序列化的对象。
他们在文档中说
从'babylonjs'导入{Engine,Scene};
注意:如果无法使此导入方法起作用,请转到下面有关打字稿和Webpack的部分。
但是,我无法使其适用于ES5版本。对我而言,正确的方法是使用ES6版本的软件包,该软件包可以安装为
npm install -S @babylonjs/core
此版本允许您将ES6软件包与摇树和其他有用功能一起使用。
在这种情况下,您的模块导入将完全符合您的期望:
import {Engine, HemisphericLight, Mesh, Scene} from '@babylonjs/core';
这是我为证明自己的话而做的small example。
请,如果我弄错了您,并且期望与您有所不同,或者需要一些其他说明或材料,请告诉我-我们很乐意为您提供帮助。