我正试图将我的threejs项目分解成更小的模块,而且我很难过。以此功能为例:
var updateCamera = (function() {
var euler = new THREE.Euler( 0, 0, 0, 'YXZ' );
return function() {
euler.x = motion.rotation.x;
euler.y = motion.rotation.y;
camera.quaternion.setFromEuler( euler );
camera.position.copy( motion.position );
camera.position.y += 10.0;
};
})();
让我们说我想将这个updateCamera函数分解为自己的文件并导入它。我对它如何自我执行有点困惑。任何人都可以帮我一把吗?
答案 0 :(得分:1)
不是分配给(global?)updateCamera
变量,而是使用(默认)导出。您可以删除整个IIFE,因为每个模块都有自己的范围;因此即使在模块顶层,euler
也将无法访问和静态。
您也可能希望显式声明对Three.js的依赖,而不是依赖于全局变量。
// updateCamera.js
import { Euler } from 'three';
var euler = new THREE.Euler( 0, 0, 0, 'YXZ' );
export default function updateCamera(camera, motion) {
euler.x = motion.rotation.x;
euler.y = motion.rotation.y;
camera.quaternion.setFromEuler( euler );
camera.position.copy( motion.position );
camera.position.y += 10.0;
}
然后你可以通过
在其他模块中使用它// main.js
import updateCamera from './updateCamera';
…
updateCamer(camera, motion);
请注意,camera
和motion
应作为参数传递到此处。再说一次,不要依赖于全局变量;如果你不想在任何地方传递它们,你也可以创建一个模块来导出它们并从中可以做到
import {camera, motion} from './globals';
答案 1 :(得分:0)
让我们说我想将这个updateCamera函数分解为自己的文件并导入它。我对它如何自我执行有点困惑。任何人都可以帮我一把吗?
在这种情况下,IIFE的唯一要点是让import { updateCamera } from './Camera'
// const camera = ..., motion = ...
updateCamera(camera, motion)
为“私人”。因为每个文件都在Node中为您提供了自己的上下文,所以您可以轻松地在没有IIFE的情况下执行此操作
setOutputFormat(QPrinter::PdfFormat)
使用它就像这样
parameters:
app_version: 1.0.0
framework:
assets:
version: '%app_version%'
version_format: '%%1$s?%%2$s'
base_urls: ['%your_assets_urls%']