webpack.validateSchema不是一个函数。

45

Webpack 突然报错:

TypeError: webpack.validateSchema 不是一个函数

上周五还好好的,今天突然就不行了。自上周五以来没有对主分支进行新提交。

尝试了清除npm缓存,不起作用,删除npm文件夹并重新安装,也不行。检查了前一周未从主分支rebase的先前分支,仍旧是同样的错误。

有人有思路吗?


天啊!我刚刚也遇到了同样的错误。这发生在我在项目中运行了npm update之后! - Moose
11个回答

32

看起来像是npm的bug,因为webpack-dev-server@2.1.0-beta.11需要webpack@^2.1.0-beta.26,但npm安装失败了。

避免更新太多而解决问题的最简单方法是更改package.json中的依赖关系为

  "webpack-dev-server": "2.1.0-beta.10",

不要使用类似于


  "webpack-dev-server": "^2.1.0-beta.9",

"^"字符在版本号前表示“兼容性版本”,去掉它则精确匹配指定版本。

不要忘记在运行完命令后运行npm installnpm update


今天早上我试过了,将 "webpack-dev-server": "^3.11.2" 改为 "webpack-dev-server": "3.11.2" 就可以了。 - Scott

11

今天我也遇到了这个问题,最终发现是 webpack 又更新了。

以下是我解决问题的步骤:

首先,我运行了 npm installnpm update 命令查看结果。我运行了这两条命令,因为 npm 报告未满足依赖关系的方式有些奇怪,有时它会出错,在重新运行 npm updatenpm install 后,你会发现未满足的依赖已经不再是一个问题。

运行完这些命令后,我注意到只剩下一个警告信息:

npm WARN webpack-dev-server@2.1.0-beta.11 requires a peer of webpack@^2.1.0-beta.26 but none was installed.

为了消除这个警告,我修改了我的 package.json 文件,将其修改为 "webpack": "2.1.0-beta.26" 而不是 "webpack": "2.1.0-beta.25",然后再次运行了 npm install

修改完后,我尝试运行 npm start,但又报了另一个错误,说我的 webpack 配置文件有问题。在我的情况下,我去了我的开发环境下的 webpack 配置文件(因为我还没有到生产环境),找到了一个名为 'outputPath' 的无效参数。

我注释掉了那一行,现在一切都运行良好了。

希望这能帮到你。也许现在只是一个 hack,但希望它是迈向正确方向的一步。

更新:

好的,关于一切“正常运行”这个说法,我有点错了。事实证明我的一些加载器不正常工作;Bootstrap 和一些其他东西并没有被正确地加载进来,破坏了我的样式。所以,为了回到之前的状态,我删除了我的 node_modules 文件夹,并使用以下 package.json 命令运行了 npm install

"webpack": "2.1.0-beta.25",
"webpack-dashboard": "^0.1.8",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "2.1.0-beta.9",
"webpack-md5-hash": "^0.0.5",
"webpack-merge": "^0.15.0",

希望这样的讨论能够帮助我们正确地推进webpack的新版本。


6

我也遇到了同样的错误。我在package.json文件中锁定了我的webpack-dev-server版本,以防止错误发生。但这并不能解决根本问题。

这是我正在使用的webpack-dev-server版本,但我相信更新版本也可以工作: "webpack-dev-server": "2.1.0-beta.9",


1
我的 package.json 文件中有 "webpack": "2.1.0-beta.25",我尝试运行 npm installnpm update。之后我得到了这个警告:npm WARN webpack-dev-server@2.1.0-beta.11 requires a peer of webpack@^2.1.0-beta.26 but none was installed. - Moose
这些是我正在使用的版本,我没有收到那个警告: "webpack": "2.1.0-beta.25", "webpack-dev-middleware": "^1.6.1", "webpack-dev-server": "2.1.0-beta.9", "webpack-md5-hash": "^0.0.5", "webpack-merge": "^0.15.0"即使有那个警告,它还是能正常工作吗?通常那个警告不会导致我的构建失败。 - Kevin Mark
我的构建出了问题。我在下面的答案部分发布了一个解决方法。 - Moose

6

当我执行以下操作时,它对我起了作用:

卸载以下软件包:

npm uninstall webpack webpack-dev-server --save -dev

安装以下软件包:

npm install --save -dev webpack@3.10.0

npm install --save -dev webpack-cli@2.0.10

npm install --save -dev webpack-dev-server@2.9.7


它对我有效:“npm install --save -dev webpack-cli@2.0.10”- 它没有起作用,但服务器仍在运行。 - Pawanvir singh
2
不确定,但我认为 --save -dev 不应该被分开写成 --save-dev. - Borjovsky

6

当我删除^并使用确切的版本时,它对我有用。

来自

"webpack": "2.1.0-beta.25",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "^2.1.0-beta.9",
"webpack-md5-hash": "^0.0.5",
"webpack-merge": "^0.14.1"

to

"webpack": "2.1.0-beta.25",
"webpack-dev-middleware": "1.6.1",
"webpack-dev-server": "2.1.0-beta.9",
"webpack-md5-hash": "0.0.5",
"webpack-merge": "0.14.1"

这里没有运气。使用精确版本,现在的错误只是在webpack.js:17:9处的错误,这是相同的验证错误。 - vgarzom
今天早上我试过了,将 "webpack-dev-server": "^3.11.2" 改为 "webpack-dev-server": "3.11.2" 就可以了。 - Scott

4

好的,更新在这里。

尝试了你们其中一些提出的建议,但不幸地陷入了更深的错误模块加载器破裂的兔子洞中。

最终,我更新到 "webpack": "^2.1.0-beta.26""webpack-dev-server": "^2.1.0-beta.11"。在此之后,发现有重大更改,导致 loaders 破裂 - https://github.com/webpack/webpack/releases

简而言之,在 webpack 配置中将 loaders: [ ... ] 改为 rules : [ ... ],并且在所有加载器声明上附加 "-loader" 到字符串值作为这样的内容,{ test: /node_modules\/i18n-iso-countries\/(de|es|nl|sv)\.js$/, loader: 'null-loader' }, { test: /\.coffee$/, loader: 'coffee-loader' },{ test: /\.ts$/, loader: ['awesome-typescript-loader']} 等等。

对我来说有效。希望这能帮助任何遇到该问题的人。


1
你好,能告诉我 webpack 配置文件的名称吗? 我似乎找不到我的项目中 loaders 的位置。 - Sina Sohi

1

这个GitHub问题所解释的,您需要将webpack更新到webpack 2.1.0-beta.26或更高版本。由于最后一个v2.1版本是beta.28,您应该使用webpack@^2.1.0-beta.28

请注意,beta.26中引入的一个重大变化是您需要指定加载程序的全名,例如使用loader: 'babel-loader'来替换loader: 'babel'


1

我通过运行这个命令使它工作:

npm install --save-dev webpack-dev-server@beta webpack@beta

0

当我们将angular/cli升级到1.6.3时,遇到了相同的问题,当我们测试ng -v时,会出现与webpack相关的错误。 因此,我们不得不卸载webpack,进行缓存清理,然后再次全局安装webpack。 这解决了问题。


0
在任何Angular应用程序中,首先执行npm install,然后执行npm update。这对我有效。

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