Stencil JS 不适用于非默认导入

Sea*_*nMC 2 javascript typescript babylonjs stenciljs

我在 StencilJS 应用程序中使用 BabylonJS,而且我似乎只能以非常特定的方式导入。

例如我不能这样做:

import { Engine, Scene } from "babylonjs";
Run Code Online (Sandbox Code Playgroud)

它说'Engine' is not exported by node_modules\babylonjs\babylon.js 但它是..

我可以:

import BABYLON from 'babylonjs';
Run Code Online (Sandbox Code Playgroud)

并像使用它一样

private _scene: BABYLON.Scene;
Run Code Online (Sandbox Code Playgroud)

我想让前者工作。有什么建议吗?

第一种方法是大多数教程是如何做到的,我拒绝相信 SencilJS 没有能力做到这一点。我肯定错过了什么

Ser*_*ell 5

BabylonJS提供两个版本(ES5ES6)。您所指的问题与软件包的 ES5 版本有关。

如果你在你的代码中这样做

import * as babylon from 'babylonjs';
console.log(babylon);
Run Code Online (Sandbox Code Playgroud)

并查看控制台,您将看到以下内容:

{default: Module, __moduleExports: Module, babylonjs: undefined}

这就是分解不起作用的原因,它不是一个可以按您期望的方式序列化的对象。

在文档中他们说

从'babylonjs'导入{引擎,场景};

注意:如果您无法使用此导入方法,请转到下面有关 typescript 和 webpack 的部分。

但是,我未能使其适用于 ES5 版本。对我来说,正确的方法是使用 ES6 版本的包,它可以安装为

npm install -S @babylonjs/core
Run Code Online (Sandbox Code Playgroud)

此版本允许您将 ES6 包与摇树和其他有用功能一起使用。

在这种情况下,您的模块导入将完全如您所愿:

import {Engine, HemisphericLight, Mesh, Scene} from '@babylonjs/core';
Run Code Online (Sandbox Code Playgroud)

这是我为证明我的话而做的一个小例子

请告诉我,如果我误会了您并且您希望有所不同,或者您需要一些额外的解释或材料 - 我很乐意提供帮助。