Home Articles

如何使用Node.js解决“无法找到模块”错误?

Asked
Viewed 467 times
469

从GitHub下拉模块并按照说明构建它之后,我尝试使用以下方法将其拉入现有项目中:

> npm install ../faye

这似乎可以解决问题:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

但是Node.js找不到模块:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

我真的很想了解这里发生了什么,但我对于下一步该看哪里感到有点失落 . 有什么建议?

24 Answers

  • 417

    对于TypeScript用户,如果要导入内置节点模块(例如 httppathurl )并且收到错误,例如 "Cannot find module "x" ,则可以通过运行修复错误

    npm install @types/node --save-dev
    

    该命令将NodeJS TypeScript定义导入到项目中,允许您使用Node的内置模块 .

  • 364

    在我的情况下,我有 UNMET PEER DEPENDENCY redux@^3.0.0 导致此错误消息,看到所有这些并使用--save再次安装丢失的模块

    npm install redux --save
    
  • 71

    我试图发布自己的包,然后将其包含在另一个项目中 . 我有这个问题,因为我已经构建了第一个模块 . 我使用ES2015导出创建模块,例如我们说模块看起来像:

    export default function(who = 'world'){
        return `Hello ${who}`;
    }
    

    用Babel编译之后发布:

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
        value: true
    });
    
    exports.default = function () {
        var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];
    
    
        return 'Hello ' + who;
    };
    

    所以在 npm install module-name 之后的另一个项目(没有ES2015)我不得不做

    var hello = require('module-name').default;

    实际上导入了包 .

    希望有所帮助!

  • 15

    也许像我一样,你将快递中的'view engine'设置为不存在的引擎,或尝试使用未注册的模板引擎 . 确保您使用: app.engine('engine name',engine) app.set('view engine','engine name')

  • 13

    当团队中的其他人在SVN中更新 package.json 时,我遇到了同样的问题 . 仅删除 node_modules 目录没有帮助 . 我是如何解决这个问题的:

    rm -rf node_modules
    rm package.json
    rm package-lock.json
    svn up
    npm install
    ng build --env=prod
    

    希望这有助于某人!

  • 8

    请安装新的CLI v3(npm install -g ionic @ latest) .

    如果此问题仍然是CLI v3中的问题 . 谢谢!

  • 5

    专家提示:

    这个错误发生在我身上,同时对抗疲劳和轻微的疾病,因为我键入 node blah 而不是 npm blah .

    收到的错误消息不够生气,不能提醒我自己的愚蠢行为!

  • 4

    更改目录并指向当前项目文件夹,然后“npm install” . .

    这会将所有依赖项和模块安装到项目文件夹中 .

  • 3

    检查环境变量NODE_PATH是否设置正确并指向node_modules路径 . nodejs使用此变量来搜索库

  • 2

    如果使用nvm,请检查是否为正确的Node.js版本编译了绑定到其他库的现有node_modules .

    我遇到了同样的错误 . 原因如下:我们使用nvm,因为我们现在在Node.js 6上运行,另一个需要Node.js 6. Node.js 6是apt-get安装 .

    我们还使用pm2工具进行部署 .

    因此,默认设置是当nvm无效时pm2进程启动,因此它使用了Node.js的apt-get安装(版本6) . 所以主要的pm2守护进程以Node.js 6开头 . 如果我在fork模式下运行应用程序,它们会在不同的进程中启动,并且nvm设置生效 . 当我以群集模式运行应用程序时 - 它们继承非nvm环境 .

    因此,当我尝试切换到群集模式时,应用程序无法启动,因为为5.6编译的绑定失败并显示此消息 .

    当nvm setings生效时,我通过重启pm2来解决这个问题 . 还应该修复启动脚本 .

  • 2

    指定restler文件夹的路径,该文件夹位于node_modules文件夹中,如:var rest = require(' . / node_modules / restler');

    这对我有用 .

  • 1

    当第一个npm安装由于某种原因(npm的SIGINT)崩溃,或者延迟太长或数据已损坏时,会发生这种情况 . 再次尝试npm安装不会解决问题 .

    npm首次检查出错了,所以最好选择删除文件并重新启动npm install .

  • 1

    首先,是的,我的答案的一部分肯定有助于解决由OP发布的 error . 其次,在尝试下面的步骤后,我遇到了其他一些错误,因此,也编写了这些错误的解决方案 .

    (Psst! I am not sure if I've successfully helped in solving the above error, or if I've broken some rule or format of answering, but I faced the above error and some others and it took much time for me to find the proper solutions for those errors. I'm writing the complete solution because in case, if someone else also faces these errors, then he'll hopefully get a solution here.)

    因此,添加并详细说明PrashanthiDevi提供的答案,并添加我的个人经验,这里是:

    我是整个e2e和单元测试部分的新手 . 我从Protractor开始研究这部分内容 . 现在我已经有了编写测试的文件,但我必须运行测试 .

    我已经安装了所有必需的软件和工具,但是当我最初运行代码来运行测试时, gulp itest ,我得到了这个 'Cannot find module' Error . 在经历了关于SO的许多不同问题之后,我找到了一个我认为可以帮助获得解决方案的答案 .

    该人建议在我的项目文件夹中运行命令 npm install .

    执行此操作的 reason 是更新项目文件夹中的 node-modules 文件夹,其中包含所有必需和必需的文件和依赖项 .

    (以下部分可能与此问题无关,但如果有人遇到我遇到的相同情况,可能会有所帮助 . )

    上面的步骤肯定 solved 我以前的错误,但扔了一个新的!这次错误是 Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver' .

    但是,这个错误的解决方案对我来说非常愚蠢(而且很有趣) . 我的 selenium 文件夹中已经有chromedriver文件 . 但是,事实证明上述错误即将发生,因为我的 chromedriver 文件位于 selenium 文件夹和 not inside chromedriver 文件夹中 . 因此,创建一个 chromedriver 文件夹并复制chromedriver文件解决了我的问题问题!

    另外,对于 error: Timed out waiting for the WebDriver Server ,您可以将 line of code 添加到 exports.config{} 内的 conf.js 文件中:

    seleniumAddress: 'http://localhost:8080/'

    希望这可以帮助!

  • 0
    npm install --save module_name
    

    例如,如果错误是:

    {[错误:无法找到模块'/root/.npm/form-data']代码:'MODULE_NOT_FOUND'}

    然后您可以通过执行命令 npm install --save form-data 来解决此问题 .

  • 0

    从项目中删除 node_module 根文件夹(例如: myApp ) . 转到 myApp 文件夹,然后在终端上键入以下命令

    >myApp>npm install
    

    它将安装项目所需的所有依赖项模块 .

  • 0

    我昨天遇到了这个错误 . 花了一些时间才意识到 package.json 中的 main 条目指向我移动的文件 . 一旦我更新了错误消失并且包工作正常 .

  • 0

    如果您的package.json中包含缺少或不正确的 main 字段的模块,则可能会遇到此错误 . 虽然模块本身已安装,npm / node必须使用单个.js文件作为模块的入口点 . 如果 main 字段不存在,则默认在模块中查找 index.js 's folder. If your module' s主文件不称为index.js,它将无法 require .

    在将基于 browserify 的模块转换为CommonJS require able模块时发现; browserify 并不关心丢失的 main 字段,因此错误没有引起注意 .

  • 0

    刚发现一个不寻常的场景可能对某人有用,并且有点像红鲱鱼 .

    我也得到了Can not Find Module错误,但奇怪的是,在我的本地(Mac托管)Node.js环境中,一切都运行良好 . 只有在我们的Linux服务器上部署代码时才会出现此问题 .

    嗯......事实证明这是一个错字(显然)基于Mac的Node.js安装非常乐意忽略 .

    包含看起来像这样:

    var S3Uploader = require('./S3Uploader.class');
    

    但实际文件名为“s3Uploader.class.js”

    注意代码和文件名之间's'与'S'的套管差异 .

    所以 - 奇怪的是,这里没有其他解决方案可以解决您的问题,请检查您是否错误地排除了所包含文件名中的字符! :)

    和DUH!

  • 0

    我可以再加一个地方来检查;我试图使用的包是我发布到私有NPM仓库的另一个我自己的包 . 我忘了在package.json中正确配置'main'属性 . 所以,包在那个消费包的node_modules文件夹中,但我得到了“找不到模块” . 我花了几分钟才意识到自己的错误 . :-(

  • 0

    仅运行以下命令:

    npm install
    

    它将在 node_modules 文件夹中安装所有必需的模块 .

  • -1

    我有一个非常相似的问题 . 删除整个 node_modules 文件夹并重新安装为我工作:

    rm -rf node_modules
    npm install
    
  • -4

    使用 webpackwebpack-dev-middleware 时遇到此问题 .

    已经 single file 变成 folder .

    观察者似乎没有看到新文件夹,现在模块丢失了 .

    通过重新启动进程修复 .

  • -4

    我得到了解决这个问题的简单解决方案 .

    只需删除C:\ Users \ UserName \ AppData \ Roaming \ npm \

    然后安装节点 .

    现在你的问题将得到解决 .

  • -41

    使用 npm install 仅将模块安装到当前目录中(在名为 node_modules 的子目录中) . app.js位于 home/dave/src/server/ 下吗?如果没有,并且您想要从任何目录使用该模块,则需要使用 npm install -g 全局安装它 .

    我通常在本地安装大多数软件包,以便它们与我的项目代码一起检入 .

    Update (3/2016):

    我收到了很多反应,特别是我检查了我的代码所依赖的包 . 几天前,有人未发布他们的所有包裹(https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp),这些包破坏了React,Babel以及其他所有东西 . 希望它依靠NPM实际上为您维护您的依赖关系 .

Related