I'm using RequireJS and when I define a new module using the function "define" I see the dependencies were resolved but the objects are not the modules I defined.
All the modules are defined in AMD format, setting a name, array of dependencies and a function. The exportation is done by return an object.
The dependencies resolved by "define" have these properties: exports, id, packaged, and uri. If I then call require function the dependencies are set correctly.
UPDATE: I created a test example with the described issue
HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Test</title>
<script src="/Scripts/require.js" data-main="../Scripts/main"></script>
<script src="/Scripts/module.js"></script>
</head>
<body>
<div>
</div>
</body>
</html>
main.js:
require(["module"], function (module) {
module.test();
});
module.js:
define([], function () {
function test() {
return "a";
}
return {
test: test
};
});
Console: Uncaught TypeError: module.test is not a function
This happens because module is not resolved to the real module but to an object with properties:
-config { arguments: null, caller: null, length: 0, name: "config" }
-exports { id: "@r5", uri: "../Scripts/@r5.js" }
Setting a module name in the define function has the same result.
NOTE: in the example there was an issue detected by @Louis. A module cannot be named "module". This helped me fixed the example but didn't fix my real issue. Below I describe the solution.
SOLUTION:
My issue was related to a library called Ace (HTML editor). This is the link that helped me solve it: https://github.com/josdejong/jsoneditor/issues/173
With the edit you made, it is now possible to diagnose the issue. Do not name any module you write with the name module, and the problem will go away.
The name module is one of three reserved module names: module, require and exports. You should never name any of your own modules with these names.
When you ask RequireJS to load module, it is not loading your module. Instead, it simply returns an internal structure which is meant to provide information about the current module. It has fields like id, which gives the current module id (i.e. the module name) and url which gives the URL from which the module was loaded, and so on and so forth.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With