RequireJS:找不到模块'domReady'
RequireJS: Cannot find module 'domReady'
我有一个很烦人但可能很简单的问题,我就是想不通。
在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
的文件之间的相对目录,或者尝试以相同的方式导入另一个库,或者最终与成功导入的其他库进行比较。
祝你好运,希望你能解决问题!
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 找不到模块捆绑包
- JavaScript命名约定;静态“;类或模块
- 显示模块模式在Knockout中设置模型的新实例
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Javascript模块系统I'I’我正在努力,但搞不明白
- 如何捆绑循环相关模块
- 如何捆绑commonjs模块,除非指定需要
- RequireJS:找不到模块'domReady'
- 应该大多数Dojo模块需要Dojo /domReady