如何在node_modules
类中加载常规NodeJS模块(来自TypeScript
)?
当我尝试编译包含以下内容的.ts
文件时
var sampleModule = require('modulename');
编译器提示我在此范围内无法使用require。 (该行位于文件的开头)。
答案 0 :(得分:91)
在无法找到符号时,Typescript会一直抱怨。编译器与window
,document
的一组默认定义结合在一起,并在名为lib.d.ts
的文件中指定。如果我在此文件中为require
执行grep,则无法找到函数require
的定义。因此,我们必须告诉编译器这个函数将在运行时使用declare
语法存在:
declare function require(name:string);
var sampleModule = require('modulename');
在我的系统上,这个编译得很好。
答案 1 :(得分:43)
正确的语法是:
import sampleModule = require('modulename');
或
import * as sampleModule from 'modulename';
然后使用--module commonjs
编译TypeScript。
如果该软件包没有附带index.d.ts
文件且其package.json
没有"typings"
属性,则tsc
会咆哮它我不知道'modulename'
指的是什么。为此,您需要在http://definitelytyped.org/上找到.d.ts
文件,或者自己写一个。
如果您正在为Node.js编写代码,您还需要http://definitelytyped.org/中的node.d.ts
文件。
答案 2 :(得分:37)
最好的解决方案是获取Node的类型定义的副本。这将解决各种依赖性问题,而不仅仅是require()
。这是以前使用像typings
这样的软件包完成的,但正如Mike Chamberlain所说,不推荐使用Typings。现代的方式就是这样:
npm install --save-dev @types/node
它不仅会修复编译器错误,还会将Node API的定义添加到IDE中。
答案 3 :(得分:4)
使用typings从TypeScript访问节点函数:
typings install env~node --global
如果您没有打字,请安装它:
npm install typings --global
答案 4 :(得分:0)
加载打字稿模块时,我使用带有扩展名的模块名称,即 “.ts”
const sampleModule = require('modulename.ts');
仅供参考,在我的例子中,“node”命令(v14.17.1)直接使用“.ts”文件而不生成“*.js”文件。