找不到chai模块,尽管它存在于node_modules文件夹中。

8
我尝试使用以下命令安装chai。
 npm install --save-dev chai

然后我使用以下导入语句运行了单元测试类。

import {assert} from 'chai';
import {expect} from 'chai';

它会抛出以下错误:
test\main\MessageBroker.spec.ts(3,22): error TS2307: Cannot find module 'chai'.
[05:38:45] [Typescript] TypeScript error: test\main\MessageBroker.spec.ts(3,22): error TS2307: Cannot find module 'chai'.
test\main\MessageBroker.spec.ts(4,22): error TS2307: Cannot find module 'chai'.
[05:38:45] [Typescript] TypeScript error: test\main\MessageBroker.spec.ts(4,22): error TS2307: Cannot find module 'chai'

我在这里做错了什么?我也可以看到node_modules文件夹中有chai文件夹。

当我使用var chai = require('chai');时,它可以正常工作!为什么import不起作用呢?

3个回答

1

我没有安装chai的类型定义,也就是说我没有从DefinitelyTyped引用chai,但是我已经将它安装为一个node模块。因此,我必须在我的typescript代码中使用require语句来调用它。

 var chai = require('chai');

在TypeScript项目中,为何会使用require语句,尤其是当chai的类型已经定义好了呢? - bhantol

0
嗯,这个错误实际上可以通过安装类型来解决。虽然很奇怪,但对我来说有效。你也试试吧:
npm i --save-dev @types/chai

0

你可能在幕后使用类似Babel的工具将代码转译为ES5。

如果是这种情况,实际上是通过Node执行require,采用CommonJS风格。

这样,如果你像在CommonJS中一样在路径后面添加./,就有可能成功。

请尝试一下,希望能解决你的问题:

import {assert} from './chai';
import {expect} from './chai';

如果它的目标是ES5,那么我认为你不应该尝试使用语法import {assert} from 'chai',因为那是ES6语法,而不是ES5。然后我会选择使用var chai = require('chai');,因为这是有效的ES5语法。 - Tiago Romero Garcia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接