今天后台的小伙伴给我发了一张图:
根据图中提示,应该是在请求某个/_nuxt/xxx.mjs
的时候报错了,如果单独在浏览器访问该文件路径也是能访问到的,那有可能就是访问量比较大,服务器响应不过来导致的,这个暂且不论。我好奇的是,在寻找/_nuxt/xxx.mjs
文件的时候,并未发现有_nuxt
这样的物理目录存在,那么它到底映射到哪里呢?
_nuxt
这样的物理目录不存在,而nuxt build
实际生成的构建产物的目录是.nuxt
,关于.nuxt
的描述,可以看一下官网文档:
The
.nuxt
directory is the so-called build directory. It is dynamically generated and hidden by default. Inside the directory you can find automatically generated files when using nuxt dev or your build artefacts when using nuxt build. Modifying these files is great for debugging but remember that they are generated files and once you run the dev or build command again, anything that was saved here will be regenerated.
简而言之,就是该.nuxt目录就是所谓的构建目录。它是在nuxt dev或者nuxt build的时候动态生成的隐藏目录。
并且在.nuxt\dist\client
目录下,也找到了/_nuxt/xxx.mjs
路径下的相同文件,那么初步可以判断_nuxt
其实指向的就是.nuxt\dist\client
目录。
为了验证这个想法,首先先去官方文档找找看:
用_nuxt
搜索,找到了buildAssetsDir
配置项,应该是与构建出来的静态资源目录有关,但文档似乎没有更多的解释。
到此,.nuxt
与_nuxt
都在文档里出现了,但没有找到更多的说明。那么就只能硬着头皮直接搜代码了:
(1)首先准备一下工具:NotePad++
(2)按如下截图步骤进行搜索:
可以看到这么一段设置:
publicAssets: [
{
baseURL: nuxt.options.app.buildAssetsDir,
dir: resolve(nuxt.options.buildDir, "dist/client")
},
...
],
nuxt.options.buildDir
这个是什么值呢?我们再去文档里看看:
那么,到这里就可以看到_nuxt
其实指向的就是.nuxt\dist\client
。
可能你还对上面的publicAssets
配置内容是怎么起作用的有所疑问,那么我们接着往下看:
publicAssets
所在的对象是作为createNitro
构造函数的配置项。而createNitro
来自于nitropack
:
import { createNitro, ... } from 'nitropack'
在nitropack
包的README.md
文件里找到了相关的文档:https://nitro.unjs.io
publicAssets
表示公共资源的目录名称,通常用于存放静态文件如图片、样式表和脚本文件。
baseUrl
是公共资源的基本 URL,用于访问公共资源的路径。
dir
是公共资源的实际存放目录,通常是相对于项目根目录的路径。
注:这个Nitro
,是Nuxt3的服务器引擎(Server engine: nitro)
最后,顺便提一个在探究过程中遇到的特别的变量__NUXT__
:
里面也出现了上面提到的buildAssetsDir : "/_nuxt/"
,但在文档中却搜索不到__NUXT__
,如果感兴趣它是怎么来的,可以按照上面的方法进行搜索,应该是在这里: