【问题标题】:How to correct NodeJS Cannot find installed package?如何纠正 NodeJS 找不到已安装的包?
【发布时间】:2016-11-22 02:35:50
【问题描述】:

刚刚浏览了 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 的样子,那么我就出局了。哈哈!

【问题讨论】:

    标签: javascript node.js angular angular2-routing


    【解决方案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');
    

    【讨论】:

    • 感谢括号中的解释,但我仍然无法使其正常工作。尝试不带括号,然后尝试使用“require”方法。使用 require 我得到 (404 Not Found) loading http://localhost:3000/eveonlinejs 这对我来说似乎很奇怪。
    • 不客气,我很乐意帮忙。根据您所说,require 方法正在运行,现在您遇到第二个问题,即服务器不处理 /evenonlinejs 路由。
    • 看来你回答了我的问题“你不能做你想做的事。”这是一个可靠的答案,但我找不到任何关于如何处理“requirejs 404 错误”的信息。老实说,我几个小时前就收到了 404 并一直开着卡车离开,因为“这不可能!”
    • 404错误与require无关。问题是您的服务器不处理your-servers-url/eveonlonejs url 上的http 请求。 url 的最后一部分和您的 npm 包具有相同名称的事实并不意味着两者是相关的。事实上,他们很可能彼此无关。确保您的服务器的路由逻辑包含有问题的路由。
    • 那个 404 只出现在页面上的 require 行中。你介意看看我上面发布的更新吗?
    猜你喜欢
    • 1970-01-01
    • 2022-07-28
    • 2012-03-24
    • 1970-01-01
    • 2021-09-13
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多