【问题标题】:Node can't find module but it exists in node_modules?Node 找不到模块,但它存在于 node_modules 中?
【发布时间】:2017-06-08 23:25:25
【问题描述】:

过去一天我一直在玩 node,我遇到了一个问题,我非常感谢帮助。

我创建了一个新项目并尝试使用我通过 npm 安装的模块,该模块按预期存在于 node_modules 目录中,并且命令运行没有错误,但节点无法找到它并引发错误(我已尝试具有相同结果的多个包)。下面解释了我所做的:

我使用npm init 创建了一个新项目并完成了package.json 的指导创建。然后我创建了一个包含这行代码的 javascript 文件。

const k = require('korbit-node');

并使用npm install korbit-node 安装了模块,然后尝试使用node index.js(我称之为js 文件)在本地运行它并得到此错误。

$ node index.js

module.js:472
    throw err;
    ^

Error: Cannot find module 'korbit-node'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/gabe/Desktop/js_sandbox/index.js:1:73)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)

对我来说,这似乎是一条相当直接的错误消息,告诉我该软件包未安装。但是我的项目结构是这样的:

├── index.js
├── node_modules
│   ├── debug
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── component.json
│   │   ├── karma.conf.js
│   │   ├── node.js
│   │   ├── package.json
│   │   └── src
│   │       ├── browser.js
│   │       ├── debug.js
│   │       ├── index.js
│   │       └── node.js
│   ├── iconv-lite
│   │   ├── Changelog.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── encodings
│   │   │   ├── dbcs-codec.js
│   │   │   ├── dbcs-data.js
│   │   │   ├── index.js
│   │   │   ├── internal.js
│   │   │   ├── sbcs-codec.js
│   │   │   ├── sbcs-data-generated.js
│   │   │   ├── sbcs-data.js
│   │   │   ├── tables
│   │   │   │   ├── big5-added.json
│   │   │   │   ├── cp936.json
│   │   │   │   ├── cp949.json
│   │   │   │   ├── cp950.json
│   │   │   │   ├── eucjp.json
│   │   │   │   ├── gb18030-ranges.json
│   │   │   │   ├── gbk-added.json
│   │   │   │   └── shiftjis.json
│   │   │   ├── utf16.js
│   │   │   └── utf7.js
│   │   ├── lib
│   │   │   ├── bom-handling.js
│   │   │   ├── extend-node.js
│   │   │   ├── index.d.ts
│   │   │   ├── index.js
│   │   │   └── streams.js
│   │   └── package.json
│   ├── korbit-node
│   │   ├── README.md
│   │   ├── korbit.js
│   │   └── package.json
│   ├── lodash
│   │   ├── README.md
│   │   ├── dist
│   │   │   ├── lodash.compat.js
│   │   │   ├── lodash.compat.min.js
│   │   │   ├── lodash.js
│   │   │   ├── lodash.legacy.js
│   │   │   ├── lodash.legacy.min.js
│   │   │   ├── lodash.min.js
│   │   │   ├── lodash.mobile.js
│   │   │   ├── lodash.mobile.min.js
│   │   │   ├── lodash.underscore.js
│   │   │   └── lodash.underscore.min.js
│   │   ├── lodash.js
│   │   └── package.json
│   ├── ms
│   │   ├── index.js
│   │   ├── license.md
│   │   ├── package.json
│   │   └── readme.md
│   └── needle
│       ├── README.md
│       ├── bin
│       │   └── needle
│       ├── examples
│       │   ├── deflated-stream.js
│       │   ├── digest-auth.js
│       │   ├── download-to-file.js
│       │   ├── multipart-stream.js
│       │   ├── parsed-stream.js
│       │   ├── parsed-stream2.js
│       │   ├── stream-events.js
│       │   ├── stream-to-file.js
│       │   └── upload-image.js
│       ├── lib
│       │   ├── auth.js
│       │   ├── cookies.js
│       │   ├── decoder.js
│       │   ├── multipart.js
│       │   ├── needle.js
│       │   ├── parsers.js
│       │   └── querystring.js
│       ├── package.json
│       └── test
│           ├── basic_auth_spec.js
│           ├── compression_spec.js
│           ├── cookies_spec.js
│           ├── decoder_spec.js
│           ├── errors_spec.js
│           ├── helpers.js
│           ├── keys
│           │   ├── ssl.cert
│           │   └── ssl.key
│           ├── parsing_spec.js
│           ├── proxy_spec.js
│           ├── querystring_spec.js
│           ├── redirect_spec.js
│           ├── stream_spec.js
│           ├── url_spec.js
│           └── utils
│               ├── formidable.js
│               ├── proxy.js
│               └── test.js
└── package.json

我可以清楚地看到 node_modules 文件中的模块,所以我不确定为什么找不到它。

我看过这些问题Node.js NODE_PATH environment variable 关于确保 NODE_PATH 设置正确,但我发现即使我明确指出了文件的路径,它仍然无法正常工作。我当然也发现了有关未安装软件包的问题,​​但在这种情况下并非如此。

有人可以告诉我为什么 node 没有找到这个,或者告诉我一些关于这个问题的资源/node 如何处理包?我确信这是一个简单的问题,但到目前为止我在网上/在文档中找到的所有内容都没有帮助。

【问题讨论】:

  • 我认为 korbit-node package.json 已损坏 - 即尝试在 korbit-node 文件夹中的 package.json 中添加一行 "main": "./korbit.js", - 请参阅 docs.npmjs.com/files/package.json#main

标签: javascript node.js module


【解决方案1】:

模块的主文件必须是 index.js。 (node_modules/korbit-node/index.js)。这里是不存在的。

node_modules/korbit-node/korbit-node.js 替换为node_modules/korbit-node/index.js

【讨论】:

  • 虽然@Jakub 的评论是正确的,因为package.json 可以指向不同的main 文件而不是index.js,这个答案确实帮助了我。我的package.json 中没有设置main,这意味着它默认指向index.js,但它并不存在。创建此文件意味着现在可以找到该模块。谢谢!
【解决方案2】:

我以前遇到过一次。我错误地将项目文件夹命名为与我尝试安装和需要的节点模块完全相同。

你的 package.json 文件所在的文件夹是否名为 korbit-node

【讨论】:

  • 你好,模块名应该和目录名不同?任何有用的链接来理解这个请?没找到,tks @麦克斯韦
猜你喜欢
  • 2019-07-26
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2018-09-17
  • 2020-05-06
  • 2020-04-02
相关资源
最近更新 更多