菜鸟总数,需要帮助。
系统:Win10。Chrome浏览器。框架:Nuxt,默认配置
我使用npm install three --save
通过npm(通过gitbash)安装了three.js。它在package.json依赖项中为"three": "^0.116.1",
。我有一个Scene.json文件保存在〜/ assets /中,该文件是使用three.js editor>导出场景生成的。
无论是否带有type="module"
,我都会收到错误消息“无法在模块外部使用import语句”
这是我正在使用的Vue组件:(仅用于客户端)。
<template>
<div id="Three">
<div id="threeContainer"></div>
</div>
</template>
<script type="module">
import * as Three from 'three'
import OBJLoader from 'three/examples/jsm/loaders/OBJLoader.js'
export default {
name: 'Three',
data() {
return {
camera: null,
scene: null,
renderer: null,
mesh: null
}
},
mounted() {
this.init()
},
methods: {
init() {
const container = document.getElementById('threeContainer')
this.camera = new Three.PerspectiveCamera(
70,
container.offsetWidth / container.offsetHeight,
0.01,
10
)
this.camera.position.z = 1
this.scene = new Three.Scene()
const loader = new OBJLoader()
loader.load(
'~/assets/scene.json',
function(obj) {
this.scene.add(obj)
},
function(xhr) {
console.log((xhr.loaded / xhr.total) * 100 + '% loaded')
},
function(err) {
console.error(err.stack)
}
)
this.renderer = new Three.WebGLRenderer({ antialias: true })
this.renderer.setSize(container.clientWidth, container.clientHeight)
container.appendChild(this.renderer.domElement)
}
}
}
</script>
<style lang="scss">
#threeContainer {
height: 300px !important;
background: black;
}
</style>
答案 0 :(得分:3)
您需要转译三个.js ES6 模块文件。
将此行添加到 nuxt.config.js 文件中:
build:{
transpile:["three"]
}
答案 1 :(得分:0)
这是ES6语法。第6行应如下所示:
从“三/examples/jsm/loaders/OBJLoader.js”中导入 { OBJLoader }