@Worddoc
Frontend explorer

Почему модуль is undefined?

Начал изучение Require js и сразу застрял.

Структура

folder
——main.js
——modules
————dom.js
————func.js

//main.js

requirejs.config({
	paths: {
		"func" : "modules/func",
		"dom": 'modules/dom'
	}
});

require(['func'],function(func){
	app.color();
});

//dom.js

var elem = document.querySelector('body');


//func.js

define(['dom'], function(dom) {
  var app = {
    color: function() {
      elem.style.background = 'red';
    }
  };

  return app;
});

Ошибка: app is not defined.

Вопрос: почему модуль is undefined, если я вернул объект-модуль через define? Как успешно подгрузить модуль func.js с зависимостью dom.js, в файл-конфиг main.js?
  • Вопрос задан
  • 1257 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Важный disclaimer: не изучайте RequireJS, уже есть нативные модули, которые совсем скоро будут доступны прямо в браузерах и nodejs.

Почитайте про область видимости в JS:
https://learn.javascript.ru/functions-closures
https://developer.mozilla.org/ru/docs/Web/JavaScri...

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

//main.js
requirejs.config({
    paths: {
        "app": "modules/app",
        "dom": 'modules/dom'
    }
});

require(['app'], function (app) {
    app.color();
});


//dom.js
define([], function() {
    return document.querySelector('body');
})


//app.js
define(['dom'], function (dom) {
    var app = {
        color: function () {
            dom.style.background = 'red';
        }
    };

    return app;
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы