Error: Cannot find module 'nexmo' & error TS2307: Cannot find module nexmo
Error: Cannot find module 'nexmo' & error TS2307: Cannot find module nexmo
所以我正在使用 NestJs 框架和 typescript。
我被要求使用 Nexmo 的节点库添加双因素身份验证 (SMS)。
这是来自他们网站的 link:https://dashboard.nexmo.com/getting-started/verify
在开发模式下,一切都按承诺进行。
但是当我尝试构建生产环境时,出现了这个错误:
Error: Cannot find module 'nexmo'
所以我开始用谷歌搜索它。
我首先阅读了有关 import 与 require 的内容。
我的 NestJs 项目中的几乎所有内容都可以使用导入。
但我记得有时使用 require 没问题。
例如,当我不得不使用这两个时,我没有问题:
const axios = require('axios');
const xml2js = require('xml2js');
然后我遇到了遇到类似问题的人,他们能够通过稍微修改他们的tsconfig.json来解决这些问题。
有些人添加了 "moduleResolution": "node" 而不是 "moduleResolution": "classic" 而其他人更改了 "module": "commonjs" to "module": "AMD", or "module": "ESNext"
我尝试了所有这些都无济于事。有时错误是从:
Error: Cannot find module 'nexmo'
至:
error TS2307: Cannot find module nexmo
然后我开始阅读这里以了解更多关于这件事的信息:
https://www.typescriptlang.org/docs/handbook/module-resolution.html
我又找不到我的解决方案。
我的一个朋友告诉我检查一些关于安装 typings 但 NestJs 已经使用 @types 从我读到的是打字的更新版本。
除此之外我没有运气。
我所了解的是,该项目必须从 ts 编译为 js,并且由于某种原因 NestJs 在 node_modules 文件夹中找不到 nexmo。
你能帮助我或指导我正确的方法吗?
查看 Github 上的 Nexmo 包,我在这里看到它正在从其主模块导出默认值:https://github.com/Nexmo/nexmo-node/blob/master/src/Nexmo.js#L175
这意味着在你的打字稿文件中你应该能够简单地说:
import Nexmo from 'nexmo';
npm 中的某些包对 commonjs 不友好(意味着它们对 node js 模块不友好),在这种情况下,您需要使用以下语法将其导入 typescript:
import Nexmo = require('nexmo');
试试第一个,看看它是否适合你。
好的 - 尝试了一些全新安装的东西,这就是我要做的:
//tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true, <- this seems to be the important one here
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true
}
}
//app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import Nexmo from 'nexmo';
const nexmo = new Nexmo({
apiKey: '',
apiSecret: '',
});
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
console.log(nexmo.verify);
return this.appService.getHello();
}
}
然后我运行
~/G/A/test-nest> master > nest build
~/G/A/test-nest >master >node ./dist/main
[Nest] 21347 - 08/19/2020, 11:36:27 AM [NestFactory] Starting Nest application...
[Nest] 21347 - 08/19/2020, 11:36:27 AM [InstanceLoader] AppModule dependencies initialized +18ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [RoutesResolver] AppController {}: +7ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [RouterExplorer] Mapped {, GET} route +3ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [NestApplication] Nest application successfully started +3ms
所以我正在使用 NestJs 框架和 typescript。
我被要求使用 Nexmo 的节点库添加双因素身份验证 (SMS)。 这是来自他们网站的 link:https://dashboard.nexmo.com/getting-started/verify
在开发模式下,一切都按承诺进行。
但是当我尝试构建生产环境时,出现了这个错误:
Error: Cannot find module 'nexmo'
所以我开始用谷歌搜索它。
我首先阅读了有关 import 与 require 的内容。
我的 NestJs 项目中的几乎所有内容都可以使用导入。
但我记得有时使用 require 没问题。 例如,当我不得不使用这两个时,我没有问题:
const axios = require('axios');
const xml2js = require('xml2js');
然后我遇到了遇到类似问题的人,他们能够通过稍微修改他们的tsconfig.json来解决这些问题。
有些人添加了 "moduleResolution": "node" 而不是 "moduleResolution": "classic" 而其他人更改了 "module": "commonjs" to "module": "AMD", or "module": "ESNext"
我尝试了所有这些都无济于事。有时错误是从:
Error: Cannot find module 'nexmo'
至:
error TS2307: Cannot find module nexmo
然后我开始阅读这里以了解更多关于这件事的信息: https://www.typescriptlang.org/docs/handbook/module-resolution.html
我又找不到我的解决方案。
我的一个朋友告诉我检查一些关于安装 typings 但 NestJs 已经使用 @types 从我读到的是打字的更新版本。
除此之外我没有运气。 我所了解的是,该项目必须从 ts 编译为 js,并且由于某种原因 NestJs 在 node_modules 文件夹中找不到 nexmo。
你能帮助我或指导我正确的方法吗?
查看 Github 上的 Nexmo 包,我在这里看到它正在从其主模块导出默认值:https://github.com/Nexmo/nexmo-node/blob/master/src/Nexmo.js#L175
这意味着在你的打字稿文件中你应该能够简单地说:
import Nexmo from 'nexmo';
npm 中的某些包对 commonjs 不友好(意味着它们对 node js 模块不友好),在这种情况下,您需要使用以下语法将其导入 typescript:
import Nexmo = require('nexmo');
试试第一个,看看它是否适合你。
好的 - 尝试了一些全新安装的东西,这就是我要做的:
//tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true, <- this seems to be the important one here
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true
}
}
//app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import Nexmo from 'nexmo';
const nexmo = new Nexmo({
apiKey: '',
apiSecret: '',
});
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
console.log(nexmo.verify);
return this.appService.getHello();
}
}
然后我运行
~/G/A/test-nest> master > nest build
~/G/A/test-nest >master >node ./dist/main
[Nest] 21347 - 08/19/2020, 11:36:27 AM [NestFactory] Starting Nest application...
[Nest] 21347 - 08/19/2020, 11:36:27 AM [InstanceLoader] AppModule dependencies initialized +18ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [RoutesResolver] AppController {}: +7ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [RouterExplorer] Mapped {, GET} route +3ms
[Nest] 21347 - 08/19/2020, 11:36:27 AM [NestApplication] Nest application successfully started +3ms