使用requirejs时,Javascript模块返回undefined

时间:2017-05-23 22:51:43

标签: javascript requirejs

index.html文件的底部,我有以下内容。

<script src="/resources/js/require.js"></script>
<script>
    $(document).ready(function() {
        require(['main'], function (main) {
            main.start();
        });
    });
</script>

这确实加载了main.js文件并在调用main.start()之前等待它完成。现在问题是返回的main变量不是模块,而是undefined

这是main.js:

define('/src/main', ['exports', '../screens/loginScreen'], function (exports, _loginScreen) {
    'use strict';

    Object.defineProperty(exports, "__esModule", {
        value: true
    });
    exports.start = undefined;

    function main() {};

    var start = exports.start = function start() {
        new _loginScreen.default().open();
    };
});
//# sourceMappingURL=main.js.map

我尝试在main.js文件末尾有一个实际的return语句。无论我返回什么,仍需要undefined

2 个答案:

答案 0 :(得分:0)

我尝试了你的代码并得到了同样的错误。我认为问题与您的main.js位置有关。如果它位于项目根目录的src文件夹中,则需要将 relative 从项目的根目录传递到require,如下所示:

require(['src/main'], function (main) {
   main.start();
});

此外,在您的main.js中,也可以使用相对路径:

define('src/main', ['exports', '../screens/loginScreen'], function...

答案 1 :(得分:0)

您的实际模块存在的问题是它没有返回任何内容,因此只返回undefined

您需要将模块包装在一个函数中并返回此函数,这是您需要的:

define('/src/main', ['exports', '../screens/loginScreen'], function(exports, _loginScreen) {
  'use strict';

  Object.defineProperty(exports, "__esModule", {
    value: true
  });

  var Main = function Main() {

  }

  Main.start = exports.start = function start() {
    new _loginScreen.default().open();
  };

  return new Main();
});

或者,如果您希望您的模块不是所有页面中共享的同一实例,并始终使用new关键字进行实例化,则只需返回Main函数:

return Main;

而不是在return new Main();中返回它的实例。