Question

I've got two AMD modules which should reference each other, but as soon as I add backward dependency, it stops working. I suppose it got stuck in waiting state.

index.html:

<!DOCTYPE html>
<html>
  <head>
    <script src="/curl.js"></script>
  </head>
  <body>
    <script>
      curl(['m1', 'm2'], function(m1, m2) {
          console.log('done', m1, m2);
      });
    </script>
  </body>
</html>

m1.js:

define(['m2'], function() {
    return 1;
});

m2.js

define(['m1'], function() {
    return 2;
});
Was it helpful?

Solution

UPD It appears I was wrong and curl.js doesn't always resolve circular dependencies.


You should declare it in CommonJS way:

index.html:

<!DOCTYPE html>
<html>
  <head>
    <script src="/curl.js"></script>
  </head>
  <body>
    <script>
      curl(['m1', 'm2'], function(m1, m2) {
          console.log('done', m1.v, m2.v);
      });
    </script>
  </body>
</html>

m1.js:

define(function(require, exports) {
    var m2 = require('m2');
    exports.v = 1;
});

m2.js

define(function(require, exports) {
    var m1 = require('m1');
    exports.v = 2;
});

Another option is to mix the approaches (AMD, CommonJS):

m1.js:

define(function(require) {
    var m2 = require('m2');
    return 1;
});

UPD But there might be some problems. I haven't yet figured out what's happening. I've created an issue for one of them for now.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top