Экспортированный объект возвращает неопределенное - PullRequest
1 голос
/ 12 апреля 2020

У меня есть следующий синглтон в моем app.js коде:

const TodoManager = (function () {
    const allTodos = [];

    return {
        addNewTodo: function (title, color) {
            allTodos.push(new Todo(title, color));
        },
    };
})();

, и я хотел бы экспортировать функцию addNewTodo в другой файл .js, поэтому я прикрепил его к концу app.js:

module.exports = TodoManager

затем в моем файле dom.js (файле, который я хочу использовать функцию addNewTodo) я импортировал его:

import TodoManager from './app.js';

Однако каждый раз, когда я пытаюсь получить доступ к любому из его объектов, он возвращает undefined. Я делаю что-то глупо неправильно?

(я использую Parcel. js в качестве упаковщика)

1 Ответ

1 голос
/ 12 апреля 2020

У вас есть:

// app.js
require("./dom.js");

const TodoManager = (function () {
  // ...

У вас также есть

// dom.js
import TodoManager from './app.js';

const MenuBar = (function(){
  // ...

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

Но в вашем коде app.js на самом деле ничего не делает с require("./dom.js"); - нет необходимости для app.js зависеть от dom.js. Итак, все, что вам действительно нужно сделать, это удалить require("./dom.js"); из app.js.

...