require.js需要带有index.js的模块

Dev*_*gay 5 javascript requirejs chutzpah typescript

因此,我正在尝试设置Typescript和Chutzpah以进行测试。打字稿设置为以以下格式输出:

define(['require', 'exports', './someModule'], function(require, exports, someModule) {
    //examplecode
});
Run Code Online (Sandbox Code Playgroud)

效果很好,当someModule实际上是带有index.js的目录时,就会出现问题。

/app
  app.js
  /someModule
    index.js
Run Code Online (Sandbox Code Playgroud)

require.js无法以这种方式解析someModule,并且测试失败。

有什么办法告诉require.js这是一个模块吗?

Lou*_*uis 3

RequireJS 不会自动检查是否存在index.js并将其加载为您的模块。您需要告诉 RequireJS 当您想要加载时someModule,它应该加载someModule/indexmap我会在通话中设置require.config

require.config({
  [ ... ]
  map: {
    '*': {
        someModule: 'someModule/index',
    }
  },
});
Run Code Online (Sandbox Code Playgroud)

您必须调整您在那里给出的名称,使其成为相对于您的baseUrl. 从您在问题中提供的信息来看,尚不清楚它应该是什么。

(根据记录,还有一个packages设置,您可能可以调整它来执行您想要的操作,但放置一些内容packages说“这是一个包”,这不是您在这里显示的内容。所以我不会将它用于您的用途试图做。)

  • 您需要为每个模块执行此操作。不支持以某种动态方式打开此功能或使用模式匹配。您可以在“map”中使用的“*”实际上是一个硬编码名称,意味着“在所有模块中”,并且它仅作为“map”本身的键才有意义,而不是其他任何地方。`map` 不会理解像 `foo*` 这样的东西,你也不能做像 `map: { '*': { '*': '...'}}` 这样的事情,第二个 `*` 将被字面解释为RequireJS 作为“名为`*`的模块”而不是“所有模块”。 (2认同)