在 Typescript 中使用 npm 模块
Posted
技术标签:
【中文标题】在 Typescript 中使用 npm 模块【英文标题】:Using npm modules in Typescript 【发布时间】:2016-07-18 11:42:29 【问题描述】:我想在 Typescript 项目中使用 npm 模块,但该模块没有打字或 tsd。当我尝试使用 import Module from 'module'
时出现错误:Cannot find module 'module'.
有没有办法修复它?
[编辑]
我的tsconfig.json
:
"compilerOptions":
"target": "ES5",
"moduleResolution": "node",
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"sourceMap": true,
"sourceRoot": "src",
"outDir": "bld"
,
"exclude": [
"bld"
]
【问题讨论】:
已在this other S/O question回复 【参考方案1】:我假设您的问题与导入模块有关
import Module from 'module'
而不是像你所说的那样导出它。如果是这种情况,您可以回退到普通的 javascript 并需要这样的模块:
var Module = require('module');
[编辑]
验证 tsconfig.json 中的编译器选项中有以下几行:
"compilerOptions":
"moduleResolution": "node",
"module": "commonjs"
希望这会有所帮助。
【讨论】:
是的,这是关于导入的问题。对我来说,这两种变体都不起作用。我想,问题是module
没有类型定义,并且打字稿不在node_modules
中寻找它。但我不知道如何解决它。
不,第二个版本不需要类型定义。检查更新的答案。
我根据您的更改修复了 tsconfig.json,但出现了同样的错误:Cannot find module 'module'
。请检查更新的tsconfig.json
模块安装了吗?您能否验证模块的文件夹是否存在于您的“node_modules”文件夹中?
唯一想到的是您的模块不是针对 commonjs 编译的。您可以使用任何其他没有定义的模块来测试它。以 'merge2' 为例,通过 npm 安装它并验证 var merge = require('merge2');
是否有效。【参考方案2】:
如果你不想用 requires 污染你的导入,你可以按照下面的方法。
您可以创建一个module.d.ts
定义文件,其中包含以下内容
declare module Module
您的导入现在应该可以工作了。
如果你想导入类似的东西
import abc from 'module';
继续添加以下内容到module.d.ts
declare module Module
export let abc: any
【讨论】:
【参考方案3】:例如: npm install numwords
然后添加导入 .ts 文件: 从'num-words'导入*作为numwords;
然后是用法: console.log((numwords(5));
【讨论】:
以上是关于在 Typescript 中使用 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在使用 Typescript 的 .net 核心项目中的 NPM 模块出现此错误?
如何在 Visual Studio 2019 中使用具有功能的 .net core + typescript + webpack + npm 模块?