今天在跑公司nuxt2项目的时候发现了一个报错问题:
ERROR context.outputFileSystem.lstat is not a function 16:51:51 at size (node_modules\webpack-dev-middleware\dist\middleware.js:169:36)at new Promise (<anonymous>)at processRequest (node_modules\webpack-dev-middleware\dist\middleware.js:167:28) at ready (node_modules\webpack-dev-middleware\dist\utils\ready.js:17:5)at Object.middleware (node_modules\webpack-dev-middleware\dist\middleware.js:70:5) at node_modules\@nuxt\webpack\node_modules\pify\index.js:33:11at new Promise (<anonymous>)at Object.<anonymous> (node_modules\@nuxt\webpack\node_modules\pify\index.js:6:9) at Object.apply (node_modules\@nuxt\webpack\node_modules\pify\index.js:80:20) at WebpackBundler.middleware (node_modules\@nuxt\webpack\dist\webpack.js:1917:37) at node_modules\@nuxt\server\dist\server.js:495:14at call (node_modules\connect\index.js:239:7)at next (node_modules\connect\index.js:183:5)at SendStream.error (node_modules\serve-static\index.js:121:7)at SendStream.emit (node:events:513:28)at SendStream.error (node_modules\send\index.js:270:17)at SendStream.onStatError (node_modules\send\index.js:417:12)at onstat (node_modules\send\index.js:722:26)at FSReqCallback.oncomplete (node:fs:202:21)
从上面的报错来看大致是在使用Webpack打包工具时和nuxt依赖有关,然后去看了package.json里的版本和下载的依赖版本是否有差异;
然后发现我package.json里面的nuxt版本写的是 "nuxt": "^2.15.3", 而下载的依赖版本是2.18.3,所以就导致了这个报错,为什么它会下载与2.18.3版本而不是2.15.3版本呢?
这就要学习一下版本管理符号了。
在JavaScript的包管理工具npm中,~
(波浪号)和^
(插入符号)是用于指定依赖版本范围的符号,它们有不同的含义:
-
~
(波浪号):当你使用波浪号指定版本时,它表示你可以接受该版本号的补丁更新。这意味着只有当主版本号或次版本号发生变化时,才会拒绝更新。例如,如果你指定了~1.2.3
,那么1.2.x的任何后续版本(如1.2.4)都是可以接受的,但是1.3.0或2.0.0则不被接受,因为它们改变了次版本号或主版本号。 -
^
(插入符号):使用插入符号指定版本时,它表示你可以接受该版本号的次要更新。这意味着只有当主版本号发生变化时,才会拒绝更新。例如,如果你指定了^1.2.3
,那么1.x.x的任何后续版本(如1.3.0、1.2.4)都是可以接受的,但是2.0.0则不被接受,因为它改变了主版本号。
简而言之,~
更严格,只允许补丁级别的更新,而^
则允许次要版本的更新,这通常包括了更多的新功能和改进。
所以解决方法是用~代替^,然后再去重装一下依赖就解决了。