如何更正NodeJS无法找到已安装的软件包?

时间:2016-11-22 02:35:51

标签: javascript node.js angular angular2-routing

刚刚浏览了Angular2的Tour of Heroes教程,真的很喜欢NPM系统,然后我去添加了我的第一个包。

我在我的package.json中添加了“eveonlinejs”:“^ 2.0.0”并运行了“npm install”

安装的软件包和文件夹存在于node_modules中。

然而,运行我的服务器会导致。

app/eveapi.service.ts(2,29): error TS2307: Cannot find module 'eveonlinejs'.

有问题的行是

import { eveonlinejs } from 'eveonlinejs';

根据我的研究,我认为导入应该在“node_modules / eveonlinejs”目录中命中package.json,并查看设置的“main”属性。

我尝试删除清除NPM缓存并重新安装node_modules文件夹。

我还尝试使用require语句指向目录,但后来我得到了一个缺少的“sax”模块,它安装在“eveonlinejs”目录中。

更新

感谢@ nem035我已经有点进一步使用 import 然而发现我在使用 require 时遇到了404错误。

通过添加此代码我能够更进一步:

systemjs.config.js

'eveonlinejs': 'npm:eveonlinejs/lib/eveonline.js'

让我回到了“萨克斯”的错误。我发现Sax由于某种原因从eveonlinejs文件夹移出到根node_modules文件夹。

'sax': 'npm:sax/lib/sax.js'

这纠正了萨克斯问题然而却给了我所有这些!

zone.js:1382 GET http://localhost:3000/node_modules/eveonlinejs/lib/client 404 (Not Found)
dashboard:17 Error: (SystemJS) XHR error (404 Not Found) loading http://localhost:3000/node_modules/eveonlinejs/lib/client
zone.js:1382 GET http://localhost:3000/node_modules/eveonlinejs/lib/cache/cache 404 (Not Found)
zone.js:1382 GET http://localhost:3000/node_modules/eveonlinejs/lib/cache/file 404 (Not Found)
zone.js:1382 GET http://localhost:3000/node_modules/eveonlinejs/lib/cache/memory 404 (Not Found)
zone.js:1382 GET http://localhost:3000/stream 404 (Not Found)
zone.js:1382 GET http://localhost:3000/string_decoder 404 (Not Found)

我解决的每一个都揭示了另一个‽如果这就是NodeJS的样子那么我就出局了。哈哈!

1 个答案:

答案 0 :(得分:1)

您要做的第一件事就是删除导入周围的{}

import { eveonlinejs } from 'eveonlinejs';
// ----^-------------^-------------------- Remove the curly braces

你可能想要这个

import eveonlinejs from 'eveonlinejs';

原因是因为在导入周围包装{}会尝试从文件中提取命名导出,但是您需要整个库。

// import { eveonlinejs } from 'eveonlinejs' expects export code as
export {
  eveonlinejs
}

当你遗漏大括号时,import会尝试提取默认导出。

// import eveonlinejs from 'eveonlinejs' expects import as
export default eveonlinejs

现在,如果您正在使用当前位于github的eveonlinejs版本,则这可能不起作用,具体取决于您如何转换模块(以及此过程如何处理module.exports

安全的方法是使用require:

var eveonlinejs = require('eveonlinejs');