Search code examples
javascriptrequirejsamd

Davis.js as AMD module?


Can i use davisjs as AMD module with requirejs? I tried, but maybe i forgot something in require config?

requirejs([
   "jquery",
   "davis"
],
function   ($, routing) {
    var app = routing(function () {
        this.get('/welcome/:name', function (req) {
            alert("Hello " + req.params['name']);
        });
    });
}

This works:

var app = Davis(function () {..});

Solution

  • Sounds like someone has a case of the Missing Shim. You need to configure RequireJS to adapt the non-AMD-compatible library into an AMD module like this:

    requirejs.config({
      paths: {
        Davis: 'script/davis'
      },
      shim: {
        Davis: {
          exports: 'Davis'
        }
      }
    });
    
    require([
      "Davis"
    ], function (davis) {
      console.log("Davis?", davis);
    });
    

    More info in RequireJS documentation


    Invoking Davis() directly works since it's available in the global scope; it's just not "registered" as an AMD module: that why it's undefined when requested by RequireJS.