RequireJS:找不到模块'domReady'。

3

我有一个非常烦人但可能很简单的问题,我就是解决不了。

在一个TypeScript文件中,我定义了以下代码行:

import test1 = require('domReady');

这个“domReady”模块定义在一个名为main.js的文件中,作为RequireJS的入口点进行加载。其定义如下:
require.config({    
    paths: {      
        'domReady': '../domReady',
    }

然而,在我的TypeScript文件中,我只是得到了一个“无法找到模块'domReady'”的错误,这让我感到疯狂,因为我已经仔细检查了文件的路径,它确实位于正确的位置,并且名称也正确。此外,我相当确定domReady.js文件是符合AMD标准的,所以它应该很好地定义了一个外部模块!(domReady GitHub Link)。
我真的不明白为什么在导入语句中找不到模块。有人有什么想法吗?
编辑1
目录结构如下:
.
+--App
| +--main.js
| +--dashboard.js
+--domReady.js

导入语句出现在“dashboard.js”文件中,而require.js的配置发生在“main.js”中。


请展示您的目录结构。 - Tomasz Jakub Rup
原帖现已更新 :) - CodingBeagle
main.jsdashboard.js 之前执行吗? - Tomasz Jakub Rup
2个回答

4
为了让TypeScript找到一个模块,你必须提供模块信息给TypeScript。
TypeScript目前不支持AMD风格的路径配置,它不会使用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文件。


0
我以前遇到过这样的问题,当路径键和目录名或文件名相同时(在您的情况下是domReady),可能无法正常工作,但值得快速尝试一下,即:

要么

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接