Для чего в этом коде «экспорт рендеринга класса по умолчанию», зачем экспортировать и использовать его?

#javascript #typescript #electron

#javascript #typescript #electron

Вопрос:

Я впервые пытаюсь создать электронное приложение, исходящее из C / C / Python с некоторым фоном django, и я не совсем понимаю, что происходит в этом коде. Это из этого репозитория здесь. https://github.com/justinctlam/BabylonJS-Electron/blob/master/src/renderer.ts

Почему он экспортирует класс, используемый в том же файле сценария? Является ли это каким-то требованием для electron?

 import * as BABYLON from 'babylonjs';

export default class Renderer {
    private _canvas: HTMLCanvasElement;
    private _engine: BABYLON.Engine;
    private _scene: BABYLON.Scene;

    createScene(canvas: HTMLCanvasElement, engine: BABYLON.Engine) {
        this._canvas = canvas;

        this._engine = engine;

        // This creates a basic Babylon Scene object (non-mesh)
        const scene = new BABYLON.Scene(engine);
        this._scene = scene;

        // This creates and positions a free camera (non-mesh)
        const camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene);

        // This targets the camera to scene origin
        camera.setTarget(BABYLON.Vector3.Zero());

        // This attaches the camera to the canvas
        camera.attachControl(canvas, true);

        // This creates a light, aiming 0,1,0 - to the sky (non-mesh)
        const light = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(0, 1, 0), scene);

        // Default intensity is 1. Let's dim the light a small amount
        light.intensity = 0.7;

        // Our built-in 'sphere' shape. Params: name, subdivs, size, scene
        const sphere = BABYLON.Mesh.CreateSphere("sphere1", 16, 2, scene);

        // Move the sphere upward 1/2 its height
        sphere.position.y = 1;

        // Our built-in 'ground' shape. Params: name, width, depth, subdivs, scene
        const ground = BABYLON.Mesh.CreateGround("ground1", 6, 6, 2, scene);
    }

    initialize(canvas: HTMLCanvasElement) {
        const engine = new BABYLON.Engine(canvas, true);
        this.createScene(canvas, engine);

        engine.runRenderLoop(() => {
            this._scene.render();
        });

        window.addEventListener('resize', function () {
            engine.resize();
        });
    }
}

const renderer = new Renderer();
renderer.initialize(document.getElementById('render-canvas') as HTMLCanvasElement);
  

Комментарии:

1. Возможно, это не требуется. Это может быть избыточный экспорт, который никогда не используется. или, может быть, в других местах кода также нужен этот класс?

2. как сказал @dwjohnston, здесь нет ничего особенного, класс экспортируется только потому, что другой файл может его импортировать. Если ни один файл не импортирует этот класс, тогда нет необходимости добавлять оператор экспорта.

Ответ №1:

Вы можете использовать класс без экспорта, когда работаете с тем же файлом. Однако целью добавления экспорта является повторное использование вашего кода другой программой с помощью импорта.

Существует два типа экспорта, один называется export, а другой — экспорт по умолчанию.

Здесь в вашем примере вы использовали экспорт по умолчанию. Экспорт по умолчанию полезен для экспорта одного объекта, функции или переменной. Вы можете использовать любое имя при импорте.

Как и в вашем случае, вы можете импортировать

 import Render from './renderer';
  

Здесь я предполагаю, что вы сохранили этот файл в renderer.js досье. Вы можете видеть, что при импорте я использую другое имя в качестве рендеринга, а не средства визуализации. Я смог это сделать, потому что класс использовал экспорт по умолчанию.

Чтобы узнать больше, нажмите Импорт экспорт