JSFiddle - React, Tailwind, and code Playground

HTML

<!-- <script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r124/three.min.js'></script> -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r125/three.min.js'></script>

CSS

body, html {
    margin: 0;
    padding: 0;
    background: #000;
  }

JavaScript

const scene = new THREE.Scene();
const aspect = window.innerWidth / window.innerHeight;
const camera = new THREE.PerspectiveCamera(75, aspect, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({
  antialias: true
});
document.body.appendChild(renderer.domElement);

function animate(cb) {
  requestAnimationFrame(() => animate(cb));
  renderer.render(scene, camera);
  cb();
}
renderer.render(scene, camera);
camera.position.set(5, 5, 5);

const crossMesh = (cubeSize, material) => {
  const geometry = new THREE.BoxGeometry(...cubeSize);

  const cube = new THREE.Mesh(geometry, material);
  cube.rotateX(Math.PI / 2);
  cube.updateMatrix();
  const geometry1 = geometry;
  geometry1.merge(cube.geometry, cube.matrix);

  const cube2 = new THREE.Mesh(geometry1, material);
  cube2.rotateZ(Math.PI / 2);
  const geometry2 = geometry;
  cube2.updateMatrix();
  geometry2.merge(cube2.geometry, cube2.matrix);

  const cube3 = new THREE.Mesh(geometry2, material);
  return cube3;
};

const mat = new THREE.MeshPhongMaterial({
  color: 0xf2f2f2,
  shininess: 100,
  side: THREE.DoubleSide
});

const cross = crossMesh([1, 7, 1], mat);
cross.position.set(0, 0, 0);
scene.add(cross);

camera.lookAt(cross.position);

const ambientLight = new THREE.AmbientLight(0xffffff);
scene.add(ambientLight);

let c = 0;
animate(() => {
  c += 0.005;
  cross.rotation.setFromVector3(new THREE.Vector3(c, 0, c));
});