"amdefine" 无法加载自定义模块

The "amdefine" can not load a custom module

我安装了 requirejs 包来优化文件路径的工作。一般来说,我会执行以下步骤:

我有一个带有文件路径的对象,它有下一个值:

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

app.js(主文件)中初始化 requirejs 映射后:

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

之后,我需要初始化基础模型,并在 for 的帮助下调用了 paths 对象中的所有文件。这看起来像:

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

当我初始化具有上述"app/database"依赖关系的文件时,出现消息错误:Error: Cannot find module 'app/database'.

也许,我不明白 "How works the amdefine",但我有意见,requirejsamdefine 不 link。你有什么想法,为什么它不起作用?

文件的一部分,需要调查:

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

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

我的调查结果:

amdefine 不知道 requirejs 映射。

完整错误信息:

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

伙计们,解决方案就在这里。 amdefine有两个参数,第一个参数是一个全局变量module,第二个是require调用本地文件的函数。默认情况下,它只是 require 而不是 requirejs 包含自定义映射。

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