RequireJS:找不到模块 'domReady'

RequireJS: Cannot find module 'domReady'

我有一个很烦人但可能很简单的问题,我就是想不通。

在 TypeScript 文件中,我定义了以下行:

import test1 = require('domReady');

此 "domReady" 模块在 main.js 文件中定义,该文件作为 RequireJS 的入口点加载。定义如下:

require.config({    
    paths: {      
        'domReady': '../domReady',
    }

但是...在我的 TypeScript 文件中我只是得到一个 "cannot find module 'domReady'" 这让我发疯,因为我已经仔细检查了文件的路径并且它确实位于正确的位置和正确的位置姓名。此外,我相当确定 domReady.js 文件与 AMD 兼容,因此它应该定义一个外部模块就好了! (domReady GitHub Link).

我真的无法理解为什么在导入语句中找不到模块。有人知道问题出在哪里吗?

编辑 1

目录结构如下:

.
+--App
| +--main.js
| +--dashboard.js
+--domReady.js

导入语句发生在 "dashboard.js" 文件中,require.js 的配置发生在 "main.js".

我以前遇到过路径键和目录名或文件名相同的问题(在您的情况下,domReady)。可能行不通,但值得快速尝试一下,即

任一

'domReadyModule': '../domReady',
require('domReadyModule')

或将 domReady.js 重命名为例如domReady-1.0.js 并使用

'domReady': '../domReady-1.0',
require('domReady')

如果这不起作用,我会检查 main.js 和执行 require 的文件之间的相对目录,或者尝试以相同的方式导入另一个库,或者最后与您导入成功的其他库进行比较。

祝你好运,希望你能解决问题![​​=17=]

为了让 TypeScript 找到模块,您必须实际向 TypeScript 提供模块信息。

TypeScript doesn’t yet support AMD-style paths configuration,它永远不会在您的 JavaScript 代码(如 require.config())中使用调用来配置自身,并且它不会处理 JavaScript编译时将磁盘上的文件作为模块。所以现在,您实际上并没有为编译器提供成功处理 import 语句所需的信息。

为了您的代码能够无误地编译,您必须在单独的 d.ts 文件中为您在编译器中导入的模块显式声明环境声明:

// in domReady.d.ts
declare module 'domReady' {
  function domReady(callback: () => any): void;
  export = domReady;
}

然后,将此 d.ts 包含在您传递给编译器的文件列表中:

tsc domReady.d.ts App/main.ts App/dashboard.ts

您导入的任何其他第三方 JavaScript 代码也需要环境声明才能成功编译; DefinitelyTyped 为其中的许多文件提供 d.ts 个文件。