Javascript 将RequireJS应用于模块化单页应用程序

Javascript 将RequireJS应用于模块化单页应用程序,javascript,requirejs,amd,Javascript,Requirejs,Amd,实际上,我有两个关于requirejs和singleton对象的问题。我希望形成一个充当应用程序核心角色的单例对象,并将其作为参数传递给模块。如何做到这一点 我遇到的另一个问题与应用程序核心内的私有对象有关。假设它充当模块的容器,但由于某种原因,当我尝试启动应用程序时,这个容器似乎有这些模块,但它无法循环。知道为什么会这样吗 下面是一个示例代码: // applicationConfig.js require.config({ baseUrl: 'js', paths: {

实际上,我有两个关于requirejs和singleton对象的问题。我希望形成一个充当应用程序核心角色的单例对象,并将其作为参数传递给模块。如何做到这一点

我遇到的另一个问题与应用程序核心内的私有对象有关。假设它充当模块的容器,但由于某种原因,当我尝试启动应用程序时,这个容器似乎有这些模块,但它无法循环。知道为什么会这样吗

下面是一个示例代码:

// applicationConfig.js
require.config({
   baseUrl: 'js',
   paths: {
      jquery: 'jquery-3.1.1.min',
      core: 'utils/applicationCore',
      domReady: '../lib/domReady'
   }
});
require(['modules']);

// modules.js
define(['core', 'domReady'], function(Core, domReady) {
   require([
      'modules/module1'
   ]);

   domReady(function() {
      var modules = Core.getModules();
      var name = '';
      for (name in modules) {
         modules[name].creator(); // Start a module...
      }
   });
});

// applicationCore.js
define(function() {
   return (function() {
     var _modules = {};

     return {
        add: function(name, creator) {
           _modules[name] = {
              creator: creator
           };
        },
        getModules: function() {
           return _modules;
        }
     }
  }());
});

// module1.js
define(['core', 'jquery'], function(Core, $) {
   Core.add('module1', function() {
      // Module constructor function.
   });
});

关于问题2:为什么要复制RequireJS已经提供的功能?你需要有一个非常具体的案例,即使你引入了一个RequireJS阻止的竞赛条件。谢谢你的评论!首先,我的案例非常具体,我开始研究requirejs的主要原因是能够管理加载所需的javascript文件(在我的案例中称为模块),从而使应用程序可维护且高效。你说的比赛条件是什么意思?我绝对不是说不要使用RequireJS。你肯定想要一个加载器,并且要求JS是一个优秀的加载器。我的意思是,它为您异步加载、缓存和实例化模块。这可以直接处理许多并发问题,包括提供安全的单例。事实上,每个模块基本上都是一个单独的模块,不要构建自己的模块缓存,RequireJS已经提供了这一点-这是根据工作原理定义的。我基本上是将RequireJS添加到现有的应用程序中,以帮助管理模块加载。出于这个原因,我开始过多地修改基本结构是不合理的。我正在开发的应用程序是一个无框架的实现,我想找到一种方法使将来的工作更容易一些。