错误:找不到模块“webpack”

226

我刚开始学习webpack,现在正在尝试构建多入口示例,但遇到了困难。示例中的webpack.config.js文件包含以下代码:

 var CommonsChunkPlugin = require("../../lib/optimize/CommonsChunkPlugin");

这对我来说失败了,出现了错误

Error: Cannot find module '../../lib/optimize/CommonsChunkPlugin'

在搜索过程中,我发现其他使用CommonsChunkPlugin与该表达式结合的示例。

var commonsPlugin = new webpack.optimize.CommonsChunkPlugin("common.js");

由于错误而失败

ReferenceError: webpack is not defined

搜索后找到了一些例子,包括:

var webpack = require('webpack');

现在我的构建失败了,错误信息为

Error: Cannot find module 'webpack'

我不知道该怎么继续下去了。


4
你之前执行过 npm install webpack 吗? - Johannes Ewald
1
“Error: Cannot find module 'webpack'”是一个node错误。因此,这与webpack本身无关(依我所见)。似乎node在查找错误的文件夹... - Johannes Ewald
8
我明白了,npm install -g webpack 对我也不起作用。但是使用npm install webpack可以。请确保在调用npm install webpack时您在应用程序的根文件夹中,并检查模块是否存在于node_modules文件夹中。此外,似乎webpack在Linux系统上需要fsevents(可选)模块 - 我正在使用Windows,所以不确定 - 也尝试安装fsevents - AndreiDMS
3
如上所述,全局安装对我也不起作用,因此请尝试在本地应用程序文件夹中安装 webpack,使用 npm install webpack 命令,不要加上 -g - AndreiDMS
在Mac本地主机上,如果只安装了全局的Webpack,则会显示相同的错误,但是如果同时安装全局和本地项目,则可以正常工作。 - user1775888
显示剩余11条评论
25个回答

398

将全局安装的包链接到您的项目:

npm link webpack

查看 yarn link官方文档


16
这是最简单的答案。 - Thomas Wagenaar
1
这个设置影响哪个文件?我没有看到任何对JSON文件的更改。你能详细说明一下吗? - Royi Namir
似乎没有任何方法可以取消链接。此后webpack-dev-server崩溃了。 - Plankton
一个月来一直无法让它工作,我几乎要放弃并继续使用Angularjs。这最终成功了!谢谢。 - NestorArturo
1
我正在安装Webpack,但是当我运行Webpack时没有任何参数显示,会出现这样的消息:你想安装哪一个(Webpack-cli/Web-command)? - Ng Sharma
经过这么多的奋斗,这个起作用了,谢谢你,@ruslanas-balčiūnas。 - Yash Pokar

91

我通过重新安装解决了相同的问题,执行这些命令:

rm -rf node_modules
rm -f package-lock.json
npm install

rm 命令总是非常危险的,特别是带上 -f 选项时,请务必在执行前注意!!!


7
package-lock.json是罪魁祸首。 - Sérgio S. Filho
@SérgioS.Filho 怎么了? - DJ_Stuffy_K
我不得不更改Node版本,因为出现了一些问题,但删除package-lock.json文件是解决问题的关键。删除node_modules并重新开始清理。 - Flavio Lima
如果您使用错误的Node版本进行npm安装,即使切换到另一个Node版本,也无法正常工作,直到您删除package-lock.json并再次运行npm安装。 - Linh Nguyen
这对我很有帮助,因为在构建服务器上链接到webpack(如先前建议的)不是一个选项。 - KrimblKrum

62

在Windows上工作时,我已经本地安装了Webpack并解决了我的问题。

所以,在您的命令提示符中,进入想要运行Webpack的目录,本地安装Webpack(不要使用-g参数),然后就可以享受啦...


14
但是您没有提到如何“本地”安装它。 - jpganz18
2
本地使用 npm install webpack,不要使用 -g 参数安装。在我的情况下这个方法奏效。 - Honza P.

34
在终端中运行以下命令:

npm install --save-dev webpack

npm install --save-dev webpack-dev-server


24

似乎是一个常见的Windows问题。以下方法解决了我的问题:

Nodejs在Windows上找不到已安装的模块?

"添加一个名为NODE_PATH的环境变量,并将其设置为%USERPROFILE%\Application Data\npm\node_modules(Windows XP),%AppData%\npm\node_modules(Windows 7)或者在Windows中的任何位置,npm会安装模块。要彻底解决问题,请在系统属性对话框的高级选项卡中将其添加为系统变量(运行control.exe sysdm.cpl,System,3)."

请注意,您不能在NODE_PATH的值中实际使用另一个环境变量。也就是说,请不要只复制并粘贴上面的字符串,而是将其设置为实际解析的路径,例如C:\Users\MYNAME\AppData\Roaming\npm\node_modules


1
在Windows 10上对我不起作用。在“C:\ Users \ MYNAME \ AppData \ Roaming \ npm \”中没有“node_modules”文件夹。我尝试设置“NODE_PATH”值为“C:\ Program Files(x86)\ nodejs \ node_modules”,但没有帮助。 - VB_
3
在Windows 10上,对我来说完全正常:setx NODE_PATH %AppData%\npm\node_modules。在NODE_PATH变量可用之前,您可能需要重新启动您的cmd或运行set NODE_PATH=%AppData%\npm\node_modules - Nux
是的。在Windows 10上运行良好。 - Siva

9

我在使用OS X系统时遇到了这个问题,似乎是由于我的全局安装的webpack版本和本地安装的webpack-dev-server版本不匹配导致的。将两者都更新到最新版本后,问题就解决了。


那对我也起作用了,所以我认为在各种情况下,如果你遇到这个问题,考虑使用它是非常值得的。 - JL Peyret

6

我遇到了同样的问题,通过这个命令我解决了它,看看吧,它会解决你的问题。

rm -Rf node_modules
rm -f package-lock.json
npm install

4

在我的情况下,全局安装webpack和CLI都起作用了。

npm i -g webpack webpack-cli

2
rm -rf node_modules
rm -rf package.json-lock
npm install --force or npm install --legacy-peer-deps

1
一个好的答案总是会包括解释为什么这样做可以解决问题,这样原帖作者和未来的读者都可以从中学习。 - Tyler2P
仅包含代码的答案可能会被降低评分或删除(即使代码提供了有效的修复)。在您的答案中包含一些文本以澄清/解释为什么它会起作用。例如,为什么您为npm install提供了两个替代方案?读者如何知道哪个替代方案是适当的?虽然这对您来说可能很明显,但对其他人来说可能不明显。另外:[1]您是否意味着编写package-json.lock而不是package.json-lock?[2]您的答案与Aman Jha已发布的答案有何不同/更好? - skomisa

2
如果你已经安装了一个node包,但仍然收到该包未定义的消息,那么你可能与链接到二进制文件的PATH有问题。请注意,二进制文件和可执行文件本质上是相同的,它们都执行一个包或应用程序,例如webpack... 执行node包webpack。
在Windows和Linux中都有一个全局二进制文件夹。在Windows中,我认为它类似于C://Windows/System32,在Linux中则是usr/bin。当你打开终端/命令提示符时,它的配置文件将PATH变量链接到全局bin文件夹,因此您可以从其中执行包/应用程序。
我的最佳猜测是,全局安装webpack可能没有成功将可执行文件放入全局二进制文件夹中。如果没有可执行文件,则会收到错误消息。这可能是另一个问题,但可以肯定的是,如果您在阅读此内容,则全局运行webpack对您无效。
我的解决方法是放弃全局运行webpack并将PATH链接到node_module二进制文件夹,即/node_modules/.bin。

WINDOWS: 将node_modules/.bin添加到您的PATH中。 这里是有关如何更改Windows中的PATH变量的教程。

LINUX: 转到您的项目根目录并执行以下操作...

export PATH=$PWD/node_modules/.bin:$PATH 

在Linux中,每次打开终端时都需要执行此命令。此链接 显示了如何使对PATH变量的更改永久化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接