这个问题还没解决!

用Vue.js 重构项目的时候,引入three.js和其他相关的东西的时候会出现上面的警告。今天就说一下这个解决办法,但是我觉得这个方法不一定适用所有的项目。

一、引入THREE

首先用 npm 安装了 three, 然后再项目里面引入了。如下代码所示。

import * as THREE from 'three'

这个时候还需要引入其他three.js 的方法。比如 STLLoader.js,因为有些文件 npm 官方库里面没有或者版本不同,所以我直接从官网的例子里面直接拷贝文件到项目直接引用。因为这些函数直接在THREE对象上添加的方法,所以我猜测直接引入就可以添加到THREE上面,所以我就直接用 import ''路径/STLLoader.js" 引入文件,这个时候就报错了,如下图。

因为全局变量没有THREE,所以接下来就开始怎么处理THREE变量全局化。

二、THREE变量全局化

THREE全局化有两种方法,

1是在webpack 里面添加全局变量。

  plugins: [
    new webpack.ProvidePlugin({
      'THREE': require.resolve('three')
    })
  ]

这种方法确实可以但是在我项目里面会出现一个问题。就是 CSS3DObject,方法找不到。

2 直接在 window全局变量上挂载 THREE,具体原理不再这里说了。

window.THREE = THREE

THREE变量全局化解决了,开始引入其他函数。

三、warnings 的出现和解决

因为这些函数是在不同的 .vue组件里面用,所以分开来引入这些函数了。分开来引入的的时候,还是有写THREE变量未定义,所以我就又在STLLoader.js 引入 THREE。

import * as {THREE} from 'three'
THREE.STLLoader = function ( manager ) {

	this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;

};

这个时候就出现了标题的问题了。最后发现是加载顺序的问题。

那么这些警告也确实够烦人的,程序员不要说自己不行,所以要解决!!

这个时候发现是引入文件的顺序出了问题,就是 STLLoader 先加载了, THREE 后加载。这个时候把 THREE的加载放在App.vue里面,然后把其他文件里面的 import * as {THREE} from 'three都删除了,就会返现没有警告了。

Logo

前往低代码交流专区

更多推荐