从 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)
我真的很想了解这里发生了什么,但是对于下一步该往哪里看,我有点茫然。有什么建议么?
node_modules
目录应位于项目的根目录中,在您的情况下与 app.js
相同。为什么使用 ..
npm 安装路径?
使用 npm install
仅将模块安装到当前目录(在名为 node_modules
的子目录中)。 app.js 是否位于 home/dave/src/server/
下?如果没有并且您想使用任何目录中的模块,则需要使用 npm install -g
全局安装它。
我通常在本地安装大多数包,以便它们与我的项目代码一起签入。
更新(8/2019):
现在你可以使用 package-lock.json 文件,它会在 npm 修改你的 node_modules 目录时自动生成。因此,您可以省略签入包,因为 package-lock.json
会跟踪您当前正在使用的 node_modules 的确切版本。要从 package-lock.json
而不是 package.json
安装软件包,请使用命令 npm ci
。
更新(3/2016):
我的回复收到了很多批评,特别是我签入了我的代码所依赖的包。几天前,有人取消了他们所有的包 (https://kodfabrik.com/journal/i-ve-just-liberated-my-modules) 的发布,这破坏了 React、Babel 和其他所有东西。希望现在很清楚,如果您有生产代码,则不能依赖 NPM 实际为您维护依赖项。
我有一个非常相似的问题。删除整个 node_modules
文件夹并重新安装对我有用:
rm -rf node_modules
npm install
npm install
/npm update
无法解决的奇怪依赖问题时,这可能是一个很好的故障排除第一步。这解决了当我尝试运行我的 Express 应用程序时 Error: Cannot find module 'http-errors'
随机开始显示的问题。
npm install
之前删除您的 package-lock.json 文件。
npm ci
会做同样的事情,但它是 x 平台
npm install --save module_name
例如,如果错误是:
{ [错误:找不到模块'/root/.npm/form-data'] 代码:'MODULE_NOT_FOUND'}
那么您可以通过执行命令 npm install --save form-data
来解决此问题。
ng new project-name
它显示一些模块丢失......我必须使用给定的命令安装它们。然后它解决了问题,但是否有任何单个命令可以一次安装所有这些?
对于 TypeScript 用户,如果您正在导入内置的 Node 模块(例如 http
、path
或 url
)并且遇到错误(例如 "Cannot find module "x"
),则可以通过运行来修复错误
npm install @types/node --save-dev
该命令会将 NodeJS TypeScript 定义导入您的项目,允许您使用 Node 的内置模块。
rm package-lock.json
rm -r node_modules
npm i
那应该解决问题并安装所有软件包。
当第一个 npm 安装由于某种原因(npm 的 SIGINT)崩溃、延迟太长或数据损坏时,就会发生这种情况。再次尝试 npm install 不会解决问题。
首次检查 npm 时出现问题,因此最好的选择是删除文件并重新启动 npm 安装。
npm cache clear
并清除了 node_modules,然后是 npm install
来解决我的问题。
我昨天遇到了这个错误。我花了一段时间才意识到 package.json
中的 main
条目指向的是我已移动的文件。一旦我更新错误消失并且包工作。
main
条目指向了一个从其存储库中排除的目录,因此当我尝试通过 npm install
包含它时它起作用了,但是在需要时找不到导出!非常感谢这个明显但有用的答案。
检查环境变量 NODE_PATH 是否设置正确并指向 node_modules 路径。 nodejs 使用这个变量来搜索库
如果您使用 nvm,请检查绑定到其他库的现有 node_modules 是否已针对正确的 Node.js 版本进行编译。
我有同样的错误。原因如下:我们使用 nvm 因为我们在服务器上运行两个应用程序,一个需要 Node.js 5.6,因为它使用 node-gd(目前不在 Node.js 6 上运行),另一个需要Node.js 6。Node.js 6 是 apt-get 安装。
我们也使用 pm2 工具来部署。
因此,默认设置是在 nvm 未生效时启动 pm2 进程,因此它使用 Node.js(版本 6)的 apt-get 安装。所以主要的 pm2 守护进程从 Node.js 6 开始。如果我在 fork 模式下运行应用程序,它们会在单独的进程中启动,并且 nvm 设置有效。当我在集群模式下运行应用程序时——它们继承了非 nvm 环境。
因此,当我尝试切换到集群模式时,应用程序无法启动,因为为 5.6 编译的绑定失败并显示此消息。
我已经通过在 nvm 设置生效时重新启动 pm2 来解决这个问题。还应该修复启动脚本。
如果您正在require
在其 package.json 中包含缺失或不正确的 main
字段的模块,则可能会遇到此错误。尽管模块本身已安装,但 npm/node 必须使用单个 .js 文件作为模块的入口点。如果 main
字段不存在,则默认为在您的模块文件夹中查找 index.js
。如果您的模块的主文件不是称为 index.js,它将无法require
它。
在将基于 browserify
的模块转换为 CommonJS require
模块时发现; browserify
不关心缺少的 main
字段,因此该错误未被注意到。
如果所有其他方法都不适合您...尝试
npm link package_name
例如
npm link webpack
npm link autoprefixer
ETC
从您的项目中删除您的 node_module
根文件夹(例如:myApp
)。转到 myApp
文件夹,然后从终端键入以下命令
>myApp>npm install
它将安装您项目所需的所有依赖模块。
专家提示:
这个错误发生在我与疲劳和轻度疾病作斗争时,因为我输入了 node blah
而不是 npm blah
。
收到的错误信息还不足以提醒我自己的愚蠢!
指定 restler 文件夹的路径,它将在 node_modules 文件夹中,如: var rest = require('./node_modules/restler');
这对我有用。
我可以再添加一个地方来检查;我尝试使用的包是我自己发布到私有 NPM 存储库的另一个包。我忘记正确配置 package.json 中的 'main' 属性。因此,该包位于消费包的 node_modules 文件夹中,但我得到“找不到模块”。我花了几分钟才意识到我的错误。 :-(
如果您使用 typescript 并在安装所有节点模块后出现错误,请删除 package-lock.json
。然后运行 npm install
。
刚刚发现了一个不寻常的场景,它可能对某人有用,有点像红鲱鱼。
我也遇到了无法找到模块错误,但奇怪的是,在我的本地(Mac 托管)Node.js 环境中一切正常。这个问题只有在我们的 Linux 服务器上部署代码时才会出现。
嗯...原来是一个错字,(显然)基于 Mac 的 Node.js 安装非常乐意忽略。
包含看起来像这样:
var S3Uploader = require('./S3Uploader.class');
但实际文件名为“s3Uploader.class.js”
请注意代码和文件名之间“s”与“S”的大小写差异。
所以 - 如果这里的其他解决方案都没有解决您的问题,请三重检查您是否没有错误地将包含的文件名中的字符大小写错误! :)
和杜!
在我的情况下,我有 UNMET PEER DEPENDENCY redux@^3.0.0
导致此错误消息,请查看所有这些并使用 --save 再次安装缺少的模块
npm install redux --save
删除 node/npm 然后重新安装稳定(不是最新的)版本对我有用。
sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}
https://nodejs.org/en/download/
我在使用 live-server
时遇到了这个问题(使用 Fullstack React 书):
我不断得到:
错误:找不到模块 './disable-browser-cache.js' ...
我不得不调整我的 package.json
来自:“脚本”:{ ... “服务器”:“live-server public --host=localhost --port=3000 --middleware=./disable-browser-cache.js” ... } “脚本” : {
收件人:...“服务器”:“live-server public --host=localhost --port=3000 --middleware=../../disable-browser-cache.js”...}
请注意相对路径似乎损坏/尴尬... ./
变为 ../../
我发现了问题 here
另外,如果有人跟随那本书:
将 packages.json 中的 devDependencies 更改为:
"live-server": "https://github.com/tapio/live-server/tarball/master"
目前从 v1.2.0 升级到 v1.2.1
使用nvm很好。最好安装 Node 的 v13.14(*v14+ 会让人头疼) nvm install v13.14.0 nvm alias default v13.14.0 Update npm with npm i -g npm@7.3.0 run: npm update 你可以使用 npm list 来查看依赖的层次结构也是如此。 (出于某种原因,节点 15 + 最新的 npm 默认只显示第一级深度 - 一个 la package.json。这使得默认命令毫无意义!您可以附加 --depth=n) 以使命令再次更有用)。你也可以使用 npm 审计。存在需要(更新 chokidar 和其他一些软件包)到较新版本的问题。 live-server 尚未更新以支持较新的相应 node v 14 库版本。
查看类似帖子here
脚注:当您到达 JSX 部分时,另一件事,请在此处查看我的答案:https://stackoverflow.com/a/65430910/495157
当您到达:
具有道具、状态和子项的高级组件配置。 P182+,节点版本 13 不支持那里的某些依赖项。
稍后也会为此添加调查结果。
就我而言,
npm install -D tslib @types/node
解决了我的问题,然后我就可以运行了
ts-node index.ts
成功地。
我试图发布自己的包,然后将其包含在另一个项目中。由于我如何构建第一个模块,我遇到了这个问题。我使用 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;
实际导入包。
希望有帮助!
将 webpack
与 webpack-dev-middleware
一起使用时遇到此问题。
已经把一个文件变成了一个文件夹。
观察者似乎没有看到新文件夹,并且模块现在丢失了。
通过重新启动进程修复。
也许像我一样,您将“视图引擎”设置为不存在的引擎,或者尝试使用未注册的模板引擎。确保您使用: app.engine('engine name',engine) app.set('view engine','engine name')
就我而言,我没有使用正确版本的 nvm。
一个罕见但可能的情况是模块名称中的拼写错误。我在执行 node .\util.js
时错过了文件名中的“s”,它应该是 node.\utils.js
,并且在这个问题下的所有答案中没有找到任何解决方案,直到我发现我什至无法运行文件如果我删除所有内容!
显然,从这个问题来看,有很多可能的原因。
也许这会对某人有所帮助,希望没有人像我一样愚蠢地使用这种技术:
检查文件夹树上是否有任何 node_modules 文件夹。
场景 1:如果您曾经有一个项目文件夹,您在多个项目之间共享一个 node_modules 文件夹,那么您可能没有任何问题
|- projects
| |- node_modules <- OK
| |- project1 <- No node_modules folder
| | |- package.json
| |- project2 <- No node_modules folder
| | |- package.json
场景 2:如果您添加了第三个不同性质的项目,您可以选择在该项目中保留一个 node_modules 文件夹:
|- projects
| |- node_modules <- Can be used by project 3
| |- project1 <- No node_modules folder
| | |- package.json
| |- project2 <- No node_modules folder
| | |- package.json
| |- project3
| | |- node_modules <- Packages for project 3 only
| | |- package.json
我猜项目 3 的 node-modules 文件夹中的一些包依赖于它在父文件夹的 node_modules 文件夹中找到(或未找到)的包。即使您希望在项目 3 的 node_modules 文件夹中找到依赖项。也许是因为某些包的导入和引用方式?
不用说,这是一场等待发生的灾难:)
我在升级节点版本以及安装几个不同的软件包版本时遇到了这个问题。该项目创建了一个 docker 镜像/容器来工作。
问题是当我添加一个包并重建项目时,没有重新创建 Docker 映像。正确的信息在我的本地 package.json 和 package-lock.json 文件中。
删除 Docker 映像而不仅仅是容器解决了我的问题。
当团队中的其他人在 SVN 中更新 package.json
时,我遇到了同样的问题。仅仅删除 node_modules
目录并没有帮助。我如何解决这个问题是:
rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod
希望这对某人有帮助!
npm install
之后一切都很好。
package.json
,NPM 如何知道要安装什么?
请安装新的 CLI v3 (npm install -g ionic@latest)。
如果这个问题在 CLI v3 中仍然是一个问题。谢谢!
不定期副业成功案例分享
package.json
列出您所依赖的 npm 模块并忽略node_modules
文件夹。然后只需npm install
即可在克隆存储库后进行设置。package.json
列出依赖项之外,我还喜欢保留我所依赖的事物的已知良好副本。磁盘空间很便宜,如果 npm 或包从 npm 中消失,我的 repo 中仍然有一个完整的工作项目。