RequireJS:找不到模块'domReady'

RequireJS: Cannot find module 'domReady'

本文关键字:domReady 模块 找不到 RequireJS      更新时间:2023-09-26

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

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

import test1 = require('domReady');

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

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

然而。。。在我的TypeScript文件中,我只是得到了一个"找不到模块'domReady'",这让我抓狂,因为我已经仔细检查了文件的路径,它确实位于正确的位置,名称正确。此外,我很确定domReady.js文件与AMD兼容,所以它应该定义一个外部模块!(domReady GitHub链接)。

我真的不明白为什么在import语句中找不到模块。有人知道问题出在哪里吗?

编辑1

目录结构如下:

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

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

为了让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代码也需要环境声明才能成功编译;DefinelyTyped为其中许多提供了d.ts文件。

我以前遇到过路径键和目录名或文件名相同的问题(在您的例子中是domReady)。可能不起作用,但值得快速尝试,即

任一

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

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

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

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

祝你好运,希望你能解决问题!