Search code examples
node.jsrequirejsrequirejs-defineamdefine

The "amdefine" can not load a custom module


I installed the requirejs package to optimize the work with paths to files. In general, I do the next steps:

I have an object with paths to file, that have next values:

"app/database": "/home/dmitry/projects/information-platform-api/app/utils/database"

After I initialize the requirejs mapping in app.js (main file):

requirejs.config({
    baseUrl: __dirname,
    nodeRequire: require,
    paths: paths,
    map: {
        '*': paths
    }
});

After, I need to initialize base models, and with help for I called all files from paths object. This looks like:

for (let file in paths) {
    requirejs(paths[file]);
}

When I initializing the file, which has the dependency of the above "app/database", I have a message error: Error: Cannot find module 'app/database'.

Maybe, I don't understand "How works the amdefine", but I have opinion, what a requirejs and amdefine don`t link. Do you have any ideas, why it doesn't work?

A part of the file, which need to investigate:

if (typeof define !== 'function') {
    var define = require('amdefine')(module);
}

define([
    'sequelize',
    'app/database',
    'model/student'
], (
    Sequelize,
    sequelize,
    Student
) => { });

Result of my investigation:

The amdefine doesn't know about requirejs mapping.

Full error message:

Error: Tried loading "/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company" at /home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company then tried node's require("/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company") and it failed with error: Error: Cannot find module 'app/database'
Require stack:
- /home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company.js
- /home/dmitry/projects/information-platform-api/app.js
- /home/dmitry/projects/information-platform-api/bin/www
    at /home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:2600:27
    at Object.execCb (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1946:33)
    at Module.check (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1133:51)
    at Module.enable (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1426:22)
    at Object.enable (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1807:39)
    at Function.req.get (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:2524:33)
    at Object.localRequire [as require] (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1678:40)
    at requirejs (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:2047:24)
    at Object.<anonymous> (/home/dmitry/projects/information-platform-api/app.js:142:5)
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
    at Module.require (internal/modules/cjs/loader.js:1042:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at Object.<anonymous> (/home/dmitry/projects/information-platform-api/bin/www:7:13)
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  originalError: Error: Cannot find module 'app/database'
  Require stack:
  - /home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company.js
  - /home/dmitry/projects/information-platform-api/app.js
  - /home/dmitry/projects/information-platform-api/bin/www
      at Function.Module._resolveFilename (internal/modules/cjs/loader.js:980:15)
      at Function.Module._load (internal/modules/cjs/loader.js:862:27)
      at Module.require (internal/modules/cjs/loader.js:1042:19)
      at req (/home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:144:31)
      at stringRequire (/home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:220:28)
      at amdRequire (/home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:113:24)
      at /home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:177:24
      at Array.map (<anonymous>)
      at runFactory (/home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:176:25)
      at define (/home/dmitry/projects/information-platform-api/node_modules/amdefine/amdefine.js:277:13)
      at Object.<anonymous> (/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company.js:5:1)
      at Module._compile (internal/modules/cjs/loader.js:1156:30)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
      at Module.load (internal/modules/cjs/loader.js:1000:32)
      at Function.Module._load (internal/modules/cjs/loader.js:899:14)
      at Module.require (internal/modules/cjs/loader.js:1042:19)
      at require (internal/modules/cjs/helpers.js:77:18)
      at /home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:2598:75
      at Object.execCb (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1946:33)
      at Module.check (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1133:51)
      at Module.enable (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1426:22)
      at Object.enable (/home/dmitry/projects/information-platform-api/node_modules/requirejs/bin/r.js:1807:39) {
    code: 'MODULE_NOT_FOUND',
    requireStack: [
      '/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company.js',
      '/home/dmitry/projects/information-platform-api/app.js',
      '/home/dmitry/projects/information-platform-api/bin/www'
    ]
  },
  moduleName: '/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company',
  requireModules: [
    '/home/dmitry/projects/information-platform-api/app/code/IndividualScheduling/model/entity/Company'
  ]
}

Process finished with exit code 1

Solution

  • The solution is here guys. The amdefine have two params, first param it's a global variable module, and the second it's require function for calling the local files. By default, it was just require not requirejs which contains custom mapping.

    if (typeof define !== 'function') {
        var define = require('amdefine')(module, require('requirejs'));
    }