Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从threeJs包中仅获取TypeScript类型?_Typescript_Webpack_Three.js - Fatal编程技术网

如何从threeJs包中仅获取TypeScript类型?

如何从threeJs包中仅获取TypeScript类型?,typescript,webpack,three.js,Typescript,Webpack,Three.js,我正在用包含threeJs功能的Webpack构建一个前端。在过去,我通常不在包中包含threeJs以保持其较小(我在index.html中使用了CDN链接中的ThreeJSUMD)。然而,我确实使用了@types/three软件包来打字 但是,@types/three现在已被弃用。相反,three现在包含自己的模块化类型。但是现在,我不知道如何在包中不包含所有大量的threeJs代码的情况下,仅对其类型使用three包 建议 我的建议是,既然您正在使用Webpack,那么: 添加three作为

我正在用包含threeJs功能的Webpack构建一个前端。在过去,我通常不在包中包含threeJs以保持其较小(我在index.html中使用了CDN链接中的ThreeJSUMD)。然而,我确实使用了
@types/three
软件包来打字

但是,
@types/three
现在已被弃用。相反,
three
现在包含自己的模块化类型。但是现在,我不知道如何在包中不包含所有大量的threeJs代码的情况下,仅对其类型使用three包


建议

我的建议是,既然您正在使用Webpack,那么:

  • 添加
    three
    作为项目依赖项,这样您就可以继续正常开发并利用包含的类型,然后
  • 使用Webpack将其从与应用程序捆绑的begin中排除
  • externals
    防止捆绑某些
    import
    ed包,而是在运行时检索它们

    按照文档示例的相同步骤,您将得到类似于以下内容的设置:

    index.html

    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r106/three.min.js">
    </script>
    
    这使得
    三个
    上的任何依赖模块保持不变,即下面显示的代码仍然有效:

    import { Scene } from 'three';
    
    const scene = new Scene();
    

    它最初被弃用,但现在是再次使用的地方。于2021年1月完成

    所以只需通过运行

    npm安装-D@types/three
    
    啊,是的——对外部的思考很好!这是可行的,尽管要从同一npm包中导入类型化OrbitalControl而不包括主要的ThreeJs构建是很困难的。我找到了解决这个问题的方法,将
    node\u modules/three/examples/jsm/*
    dir中的所有内容复制到我的代码库中,并更改它们的导入路径。你可以看到我的解决方案
    import { Scene } from 'three';
    
    const scene = new Scene();