尽管它存在于节点模块文件夹中,但找不到模块 chai

Posted

技术标签:

【中文标题】尽管它存在于节点模块文件夹中,但找不到模块 chai【英文标题】:cannot find module chai though it exists in node modules folder 【发布时间】:2016-11-12 05:59:27 【问题描述】:

我尝试使用以下命令安装 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');有用!为什么导入不起作用?

【问题讨论】:

【参考方案1】:

我还没有为 chai 安装打字机,也就是说我没有从 DefinitiveTyped 中引用 chai,而是将它安装为节点模块。因此,我不得不在我的打字稿代码中使用 require 语句来调用它。

 var chai = require('chai');

【讨论】:

为什么要在 TypeScript 项目中使用 require,尤其是在为 chai 定义类型时?【参考方案2】:

你可能在后台使用 Babel 之类的东西来转译到 ES5。

如果是这种情况,它实际上是在 Node 上执行 require,CommonJS 样式。

如果你像我们在 CommonJS 中做的那样,在路径后面加上./,这样你可能会成功。

请试一试,希望能解决您的问题:

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

【讨论】:

我正在使用这个生成器npmjs.com/package/generator-typescript-npm-bower。它的目标是 ES5。但是放 ./ 并没有帮助。它仍然说找不到模块。我无法将目标更改为 ES6。那么还有其他解决方法吗? 如果它以 ES5 为目标,那么我相信你不应该尝试使用语法 import assert from 'chai',因为那是 ES6 语法,而不是 ES5。然后我会继续使用var chai = require('chai');,因为这是有效的 ES5 语法。

以上是关于尽管它存在于节点模块文件夹中,但找不到模块 chai的主要内容,如果未能解决你的问题,请参考以下文章

尽管安装并需要,但找不到模块“firebase-tools”的声明文件

模块qtcore.dll已经加载,但找不到入口点怎么解决

手动注册节点模块

模块“msvcp110.dll”已加载,但找不到入口点DllRegisterserver。 怎么办

尽管已安装模块,但 Node.js 找不到模块

节点模块导出,访问不存在的属性错误,Jasmine