Stencil JS不适用于非默认导入

时间:2019-08-17 00:04:22

标签: javascript typescript babylonjs stenciljs

我正在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不能做到这一点。我一定想念一些东西

1 个答案:

答案 0 :(得分:4)

BabylonJS有两种版本(ES5ES6)。您所指的问题与软件包的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

请,如果我弄错了您,并且期望与您有所不同,或者需要一些其他说明或材料,请告诉我-我们很乐意为您提供帮助。