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



10 Answers

我有一个非常类似的问题。 删除整个node_modules文件夹并重新安装对我node_modules

rm -rf node_modules
npm install
Question

从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)

我真的很想明白这里发生了什么,但是我在接下来的位置上有点不知所措。 有什么建议么?




我可以添加一个地方来检查; 我试图使用的包是另一个我自己的包,我已经发布到一个私人NPM回购。 我忘记了正确配置package.json中的'main'属性。 因此,该软件包位于消费包的node_modules文件夹中,但我收到“无法找到模块”。 花了我几分钟才明白我的错误。 :-(




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

(嘘!我不知道我是否成功地帮助解决了上述错误,或者如果我已经打破了一些规则或格式的回答,但是我遇到了上述错误和其他一些错误,并且我花了很多时间找到这些错误的正确解决方案,我正在编写完整的解决方案,因为如果其他人也面临这些错误,那么他会希望在这里得到解决方案。)

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

我对整个e2e和单元测试部分是新手。 我开始从Protractor看这部分。 现在我已经有了写测试的文件,但是我必须运行测试。

我已经安装了所有必需的软件和工具,但是当我最初运行测试代码时, gulp itest ,我得到了'找不到模块'的错误 。 在经历了许多不同的问题之后,我发现了一个我认为可以帮助获得解决方案的答案。

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

这样做的理由是更新我们的项目文件夹中的node-modules文件夹,其中包含所有必需的和必需的文件和依赖关系。

(下面的部分可能与这个问题无关,但如果有人遇到我遇到的相同情况,可能会有帮助。)

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

然而,这个错误的解决方案对我来说很愚蠢(也很搞笑)。 我的文件夹中已经有了chromedriver文件。 但是,事实证明,上述错误是因为我的chromedriver文件在文件夹中,而不是在 chromedriver文件夹内。 所以,创建一个chromedriver文件夹并复制chromedriver文件解决了我的问题!

另外,对于错误:等待WebDriver服务器超时 ,可以将这行代码添加到exports.config exports.config{} conf.js文件中:

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

希望这可以帮助!




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

我也遇到了无法找到模块错误,但奇怪的是,在本地(Mac托管的)Node.js环境中,一切都很完美。 只有在我们的Linux服务器上部署代码时才会出现此问题。

那么......原来这是一个错误(显然)基于Mac的Node.js安装非常乐意忽略。

包括看起来像这样:

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

但实际的文件被称为“s3Uploader.class.js”

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

所以 - 奇怪的是,这里其他的解决方案都没有解决你的问题,三重检查你是不是错误的包装你包含的文件名中的字符! :)

和DUH!




仅运行以下命令:

npm install

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




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

这对我有效。




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

首先检查npm时出错,所以最好的选择是删除文件并重新启动npm install。




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




我试图发布我自己的软件包,然后将其包含在另一个项目中。 由于我已经构建了第一个模块,所以我遇到了这个问题。 我使用ES2015导出创建模块,例如可以说模块看起来像这样:

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

经过巴贝尔编译并出版之前:

'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)中npm install module-name ,我不得不这样做

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

要真正获得导入的包。

希望有所帮助!




专家提示:

这个错误发生在我身上,因为我打了疲劳和轻微的疾病,因为我输入了node blah而不是npm blah

收到的错误信息并不足以让我意识到自己的愚蠢行为!




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

npm install @types/node --save-dev

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






Related



Tags

node.js node.js