尽管它存在于节点模块文件夹中,但找不到模块 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”的声明文件