打字稿:"Cannot find module" 具有有效的打字
Typescript: "Cannot find module" with valid typings
我刚刚使用打字稿开始了一个新的 nodejs 项目。我安装了 Typings (https://github.com/typings/typings) 并用它来为节点 v4.x 和 express v4.x.
安装参考文件
我的node版本是v4.2.6
我的打字稿版本是 v1.7.5
我的项目目录是这样布局的:
package.json
tsconfig.json
typings.json
src/
app.ts
typings/
main.d.ts
main/ambient/node/node.d.ts
main/ambient/express/express.d.ts
typings/main.d.ts内容如下:
/// <reference path="main/ambient/express/express.d.ts" />
/// <reference path="main/ambient/node/node.d.ts" />
tsconfig.json内容如下:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs"
}
}
关typings.json内容如下:
{
"dependencies": {},
"devDependencies": {},
"ambientDependencies": {
"express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81"
}
}
src/app.ts内容如下:
'use strict';
///<reference path="../typings/main.d.ts"/>
import * as express from "express";
这非常简单,应该会生成一个基本的应用程序。但是,当我尝试编译它时,出现错误 error TS2307: Cannot find module 'express'.
我尝试重新排列类型文件,更改参考路径标签中的相对路径,使用 tsconfig.json 中的 files
字段指示参考路径,而不是在文件中使用内联标签,都无济于事。我还尝试直接在命令行上使用 gulp-typescript
、gulp-tsc
和 tsc
进行编译。
当我尝试使用 nodejs 内置模块时遇到类似的错误,例如 crypto
、http
、fs
等
这些引用似乎有效——我错过了什么?
三斜杠指令需要放在文件中的任何语句之前。您的 "use strict"
序言需要在 之后 您的参考评论如下:
///<reference path="../typings/main.d.ts"/>
'use strict';
import * as express from "express";
作为对您的评论的跟进,您没有为您的导入获得任何发射:那是因为 TypeScript 执行导入省略。除非您将模块用于某些值,否则编译器不会发出导入,因为它假定您只需要该模块的类型。
Daniel 的回答在技术上是正确的,但根据您的 tsconfig main.d.ts
仍然会被采纳,因此不会为您解决问题。
也就是说我确实发现了问题并发送了拉取请求:https://github.com/jereynolds/ts-test/pull/1
你可能应该排除 typings
和 node_modules
否则编译将包含重复的标识符(类型)/会很慢(node_modules)
键入安装 serve-static
(express
需要)和 mime
(serve-static
需要)。
我知道这是一个老问题,很抱歉碰到它,但它作为 Google 中的第一个链接出现。
由于上述没有解决我的问题,我最终解决了它,我想我应该分享...在我的例子中,是相对路径导致了这个问题。
我的打字在
typings/bootstrap
,
typings/react-dom
,
typings/react
,
等等
react-dom
有一个 import from 'react'
。要修复我的代码,我必须将其编辑为 '../react/react'
。简单!
None 以上对我有用 - 所以我希望这会帮助其他人。 (我正在使用 VS 代码)。
这个问题突然发生在我的一个服务上,在几个模块中被引用。在保存了一个完全不相关的没有使用该服务的组件后,使用该服务的两个组件报告了 'cannot find module' 错误。我能够通过简单地将声明更改为无效文件夹、保存文件然后将其更改回正确路径来修复它。
我刚刚使用打字稿开始了一个新的 nodejs 项目。我安装了 Typings (https://github.com/typings/typings) 并用它来为节点 v4.x 和 express v4.x.
安装参考文件我的node版本是v4.2.6 我的打字稿版本是 v1.7.5
我的项目目录是这样布局的:
package.json
tsconfig.json
typings.json
src/
app.ts
typings/
main.d.ts
main/ambient/node/node.d.ts
main/ambient/express/express.d.ts
typings/main.d.ts内容如下:
/// <reference path="main/ambient/express/express.d.ts" />
/// <reference path="main/ambient/node/node.d.ts" />
tsconfig.json内容如下:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs"
}
}
关typings.json内容如下:
{
"dependencies": {},
"devDependencies": {},
"ambientDependencies": {
"express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81"
}
}
src/app.ts内容如下:
'use strict';
///<reference path="../typings/main.d.ts"/>
import * as express from "express";
这非常简单,应该会生成一个基本的应用程序。但是,当我尝试编译它时,出现错误 error TS2307: Cannot find module 'express'.
我尝试重新排列类型文件,更改参考路径标签中的相对路径,使用 tsconfig.json 中的 files
字段指示参考路径,而不是在文件中使用内联标签,都无济于事。我还尝试直接在命令行上使用 gulp-typescript
、gulp-tsc
和 tsc
进行编译。
当我尝试使用 nodejs 内置模块时遇到类似的错误,例如 crypto
、http
、fs
等
这些引用似乎有效——我错过了什么?
三斜杠指令需要放在文件中的任何语句之前。您的 "use strict"
序言需要在 之后 您的参考评论如下:
///<reference path="../typings/main.d.ts"/>
'use strict';
import * as express from "express";
作为对您的评论的跟进,您没有为您的导入获得任何发射:那是因为 TypeScript 执行导入省略。除非您将模块用于某些值,否则编译器不会发出导入,因为它假定您只需要该模块的类型。
Daniel 的回答在技术上是正确的,但根据您的 tsconfig main.d.ts
仍然会被采纳,因此不会为您解决问题。
也就是说我确实发现了问题并发送了拉取请求:https://github.com/jereynolds/ts-test/pull/1
你可能应该排除
typings
和node_modules
否则编译将包含重复的标识符(类型)/会很慢(node_modules)键入安装
serve-static
(express
需要)和mime
(serve-static
需要)。
我知道这是一个老问题,很抱歉碰到它,但它作为 Google 中的第一个链接出现。
由于上述没有解决我的问题,我最终解决了它,我想我应该分享...在我的例子中,是相对路径导致了这个问题。
我的打字在
typings/bootstrap
,
typings/react-dom
,
typings/react
,
等等
react-dom
有一个 import from 'react'
。要修复我的代码,我必须将其编辑为 '../react/react'
。简单!
None 以上对我有用 - 所以我希望这会帮助其他人。 (我正在使用 VS 代码)。
这个问题突然发生在我的一个服务上,在几个模块中被引用。在保存了一个完全不相关的没有使用该服务的组件后,使用该服务的两个组件报告了 'cannot find module' 错误。我能够通过简单地将声明更改为无效文件夹、保存文件然后将其更改回正确路径来修复它。