typescript getting error TS2304: cannot find name ' require'
我正在尝试运行我的第一个typescript和definitelytyped节点应用程序,并遇到一些错误。
当我试图打开一个简单的TS节点页面时,我得到了错误"ts2304:cannot find name'require'"。我已经阅读了关于so的其他几个错误,我认为我没有类似的问题。我正在shell提示符下运行命令:tsc movie.server.model.ts。此文件的内容为:
1 2 3 4 5 6 7 8 9 10 | 'use strict'; /// <reference path="typings/tsd.d.ts" /> /* movie.server.model.ts - definition of movie schema */ var mongoose = require('mongoose'), Schema = mongoose.Schema; var foo = 'test'; |
在var mongoose=require("mongoose")行上引发错误。
typings/ts d.d.ts文件的内容如下:
1 2 | /// <reference path="node/node.d.ts" /> /// <reference path="requirejs/require.d.ts" /> |
.d.ts文件引用放在适当的文件夹中,并通过以下命令添加到typings/tsd.d.ts中:
1 2 | tsd install node --save tsd install require --save |
生成的.js文件似乎工作正常,所以我可以忽略错误。但我很高兴知道为什么会发生这种错误,以及我做错了什么。
又快又脏
如果您只有一个使用REQUEST的文件,或者您是为了演示而这样做的,那么您可以在typescript文件的顶部定义REQUEST。
1 | declare var require: any |
打字稿2
如果您使用的是typescript 2.x,则不再需要安装打字或明确键入。只需安装以下软件包。
1 | npm install @types/node --save-dev |
申报文件的未来(6/15/2016)
Tools like Typings and tsd will continue to work, and we’ll be working
alongside those communities to ensure a smooth transition.
可选的:如果您在您的
下面是每个选项的正确配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "compilerOptions": { // types option has been previously configured "types": [ // add node as an option "node" ], // typeRoots option has been previously configured "typeRoots": [ // add path to @types "node_modules/@types" ] } } |
打字稿1
使用类型(definitelytyped的替换)可以直接从Github存储库中指定定义。
安装类型
1 | npm install typings -g --save-dev |
从DefinitelyType的repo安装RequireJS类型定义
1 | typings install dt~node --save --global |
WebPACK
如果使用Webpack作为构建工具,则可以包括Webpack类型。
NPM安装--save dev@types/webpack env
在
1 2 3 | "types": [ "webpack-env" ] |
这允许您执行
使用cli,您可以按照上面的webpack步骤,将"types"块添加到您的
或者,您可以使用预先安装的
对于typescript 2.x,现在有两个步骤:
安装一个定义
1 | npm install @types/node --save-dev |
告诉typescript在
1 2 3 4 5 | { "compilerOptions": { "types": ["node"] } } |
第二步仅在需要访问全局可用功能(如
你可以
1 | declare var require: any |
或者,要获得更全面的支持,请使用definitelytyped's require.d.ts
另外,您可以尝试以下方法,而不是使用
1 2 | import mongoose from 'mongoose' // or import mongoose = require('mongoose') |
而不是:
1 2 3 | 'use strict'; /// <reference path="typings/tsd.d.ts" /> |
尝试:
1 2 3 | /// <reference path="typings/tsd.d.ts" /> 'use strict'; |
即先参考路径。
我发现解决方案是使用tsd命令:
1 | tsd install node --save |
它添加/更新
在我的文件顶部,我这样引用了
1 | /// <reference path="../typings/tsd.d.ts" /> |
截至2016年1月,要求的定义如下:
1 2 3 4 5 6 7 8 9 10 11 | declare var require: NodeRequire; interface NodeModule { exports: any; require: NodeRequireFunction; id: string; filename: string; loaded: boolean; parent: any; children: any[]; } |
这个答案与现代设置有关(typescript 2.x,webpack>2.x)
您不需要安装@types/node(这是所有node.js类型,对于前端代码来说是不可替代的,实际上会使设置不同的返回值等事情变得复杂化。
您需要安装@types/webpack env
它提供Webpack具有的运行时签名(包括Require和Require.Secure等)。
还要确保tsconfig.json没有设置"types"数组->这将使它在node_modules/@types文件夹中拾取所有类型定义。如果要限制类型搜索,可以将typeroot属性设置为node_modules/@types
我将Peter Varga的答案添加到
安装预处理器加载程序:
1 | npm install preprocessor-loader |
将加载程序添加到webpack.config.js(我正在使用TS加载程序处理typescript源):
1 2 3 4 5 6 | module: { loaders: [{ test: /\.tsx?$/, loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json' }] } |
1 2 3 4 5 6 7 8 9 | { "line": false, "file": true, "callbacks": [{ "fileName":"all", "scope":"source", "callback":"(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })" }] } |
你也可以用同样的方法增加更强大的需求,但在我的情况下,
注意,预处理器1.0.5中有一个bug,它切断了最后一行,所以只要确保在末尾有一个额外的行空间返回,就可以了。
仅供参考,我使用的是Angular 7.1.4,typescript 3.1.6,我唯一需要做的就是在
1 | "types": ["node"], // within compilerOptions |
希望能有所帮助。
确保已安装
电子+角2/4加成:除了将"node"类型添加到ts.config各种文件之外,最终对我有效的是将下一个添加到typings.d.ts文件:
1 2 3 4 5 | declare var window: Window; interface Window { process: any; require: any; } |
注意,我的例子是电子+角2/4。我需要window global的要求。
有时tsconfig.json中缺少"jasmine"可能会导致此错误。(手写体2.x)
所以添加
1 2 3 4 | "types": [ "node", "jasmine" ] |
到tsconfig.json
从"mongoose"导入*作为mongoose
我也一直在努力解决这个问题。我相信这适用于所有的发布候选人,也就是RC,但我没有测试。对于@angular rc.2,它工作得很好。
干杯!
如果您可以编译代码,但Visual Studio 2015将"require"标记为"errors with error text cannot find name"require",或者无法将符号"require"将Visual Studio 2015的typescript更新为最新版本(目前为2.1.5),并将resharper(如果使用)更新为至少版本2016.3.2。
我有一段时间遇到了这个烦人的问题,找不到解决办法,但最终还是用这种方式解决了。希望这对某人有帮助。
您是否指定了要使用哪个模块来生成代码?
您还必须安装Mongoose定义
不要使用
除了cgatian的答案,对于typescript 1.x
如果仍然看到错误,请在编译器选项中特别提供index.d.ts。
1 2 3 | "files": [ "typings/index.d.ts" ] |
在
1 | "typeRoots": ["../node_modules/@types" ] |
我还有另外一个答案,它建立在之前描述
在我的例子中,我有一个基础
1 2 3 4 5 6 | { "extends":"../../tsconfig.json", "compilerOptions": { "outDir":"../out-tsc/app", "types": [] }, |
我的问题是这个
使用上面的任何技巧,我都无法消除"需要"错误。
但我发现问题是我的Visual Studio排版脚本工具,旧版本(1.8.6.0)和最新版本(2.0.6.0)
您可以从以下位置下载最新版本的工具:
https://www.microsoft.com/en-us/download/details.aspx?ID=48593
如果您在一个TS文件中遇到这个问题,该文件只提供一些常量值,那么您可以
rename your .ts file to .js file
错误不会再出现了。