【问题标题】:RequireJS: Cannot find module 'domReady'RequireJS:找不到模块“domReady”
【发布时间】:2015-12-17 13:07:30
【问题描述】:

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

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

import test1 = require('domReady');

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

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

但是...在我的 TypeScript 文件中,我只是得到一个“找不到模块 'domReady'”,这让我发疯了,因为我已经仔细检查了文件的路径,它确实位于正确的位置正确的名字。此外,我相当肯定 domReady.js 文件是 AMD 兼容的,所以它应该定义一个外部模块就好了! (domReady GitHub Link)。

我真的无法理解为什么在 import 语句中找不到模块。有没有人知道问题可能是什么?

编辑 1

目录结构如下:

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

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

【问题讨论】:

  • 请显示您的目录结构
  • 原帖现已更新:)
  • main.js 是否在dashboard.js 之前执行?

标签: javascript import typescript requirejs amd


【解决方案1】:

为了让 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 文件。

【讨论】:

    【解决方案2】:

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

    要么

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2017-10-07
      相关资源
      最近更新 更多