Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/nuxtPublic

Commite762a1e

Browse files
committed
perf(nuxt,vite): use filters to avoid running hooks unnecessarily
1 parent5bd8e81 commite762a1e

File tree

5 files changed

+69
-44
lines changed

5 files changed

+69
-44
lines changed

‎packages/nuxt/src/core/plugins/layer-aliasing.ts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ interface LayerAliasingOptions {
1313

1414
constALIAS_RE=/(?<=['"])[~@]{1,2}(?=\/)/g
1515
constALIAS_RE_SINGLE=/(?<=['"])[~@]{1,2}(?=\/)/
16+
constALIAS_ID_RE=/^[~@]{1,2}\//
1617

1718
exportconstLayerAliasingPlugin=(options:LayerAliasingOptions)=>createUnplugin((_options,meta)=>{
1819
constaliases:Record<string,Record<string,string>>={}
@@ -60,6 +61,9 @@ export const LayerAliasingPlugin = (options: LayerAliasingOptions) => createUnpl
6061
vite:{
6162
resolveId:{
6263
order:'pre',
64+
filter:{
65+
id:ALIAS_ID_RE,
66+
},
6367
asynchandler(id,importer){
6468
if(!importer){return}
6569

‎packages/nuxt/src/core/plugins/resolve-deep-imports.ts‎

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { resolveModulePath } from 'exsolve'
33
import{isAbsolute,normalize,resolve}from'pathe'
44
importtype{Environment,Plugin}from'vite'
55
import{directoryToURL,resolveAlias}from'@nuxt/kit'
6+
importescapeREfrom'escape-string-regexp'
67
importtype{Nuxt}from'@nuxt/schema'
78

89
import{pkgDir}from'../../dirs'
@@ -33,47 +34,58 @@ export function ResolveDeepImportsPlugin (nuxt: Nuxt): Plugin {
3334
return{
3435
name:'nuxt:resolve-bare-imports',
3536
enforce:'post',
36-
asyncresolveId(id,importer){
37-
if(!importer||isAbsolute(id)||(!isAbsolute(importer)&&!VIRTUAL_RE.test(importer))||exclude.some(e=>id.startsWith(e))){
38-
return
39-
}
37+
resolveId:{
38+
filter:{
39+
id:{
40+
exclude:[
41+
// absolute path
42+
/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i,
43+
...exclude.map(e=>newRegExp('^'+escapeRE(e))),
44+
],
45+
},
46+
},
47+
asynchandler(id,importer){
48+
if(!importer||(!isAbsolute(importer)&&!VIRTUAL_RE.test(importer))){
49+
return
50+
}
4051

41-
constnormalisedId=resolveAlias(normalize(id),nuxt.options.alias)
42-
constisNuxtTemplate=importer.startsWith('virtual:nuxt')
43-
constnormalisedImporter=(isNuxtTemplate ?decodeURIComponent(importer) :importer).replace(VIRTUAL_RE,'')
52+
constnormalisedId=resolveAlias(normalize(id),nuxt.options.alias)
53+
constisNuxtTemplate=importer.startsWith('virtual:nuxt')
54+
constnormalisedImporter=(isNuxtTemplate ?decodeURIComponent(importer) :importer).replace(VIRTUAL_RE,'')
4455

45-
if(nuxt.options.experimental.templateImportResolution!==false&&isNuxtTemplate){
46-
consttemplate=nuxt.options.build.templates.find(t=>resolve(nuxt.options.buildDir,t.filename!)===normalisedImporter)
47-
if(template?._path){
48-
constres=awaitthis.resolve?.(normalisedId,template._path,{skipSelf:true})
49-
if(res!==undefined&&res!==null){
50-
returnres
56+
if(nuxt.options.experimental.templateImportResolution!==false&&isNuxtTemplate){
57+
consttemplate=nuxt.options.build.templates.find(t=>resolve(nuxt.options.buildDir,t.filename!)===normalisedImporter)
58+
if(template?._path){
59+
constres=awaitthis.resolve?.(normalisedId,template._path,{skipSelf:true})
60+
if(res!==undefined&&res!==null){
61+
returnres
62+
}
5163
}
5264
}
53-
}
5465

55-
constdir=parseNodeModulePath(normalisedImporter).dir||pkgDir
66+
constdir=parseNodeModulePath(normalisedImporter).dir||pkgDir
5667

57-
constres=awaitthis.resolve?.(normalisedId,dir,{skipSelf:true})
58-
if(res!==undefined&&res!==null){
59-
returnres
60-
}
68+
constres=awaitthis.resolve?.(normalisedId,dir,{skipSelf:true})
69+
if(res!==undefined&&res!==null){
70+
returnres
71+
}
6172

62-
constenvironmentConditions=conditions[this.environment.name]||=resolveConditions(this.environment)
73+
constenvironmentConditions=conditions[this.environment.name]||=resolveConditions(this.environment)
6374

64-
constpath=resolveModulePath(id,{
65-
from:[dir, ...nuxt.options.modulesDir].map(d=>directoryToURL(d)),
66-
suffixes:['','index'],
67-
conditions:environmentConditions,
68-
try:true,
69-
})
75+
constpath=resolveModulePath(id,{
76+
from:[dir, ...nuxt.options.modulesDir].map(d=>directoryToURL(d)),
77+
suffixes:['','index'],
78+
conditions:environmentConditions,
79+
try:true,
80+
})
7081

71-
if(!path){
72-
logger.debug('Could not resolve id',id,importer)
73-
returnnull
74-
}
82+
if(!path){
83+
logger.debug('Could not resolve id',id,importer)
84+
returnnull
85+
}
7586

76-
returnnormalize(path)
87+
returnnormalize(path)
88+
},
7789
},
7890
}
7991
}

‎packages/vite/src/plugins/environments.ts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { dirname, isAbsolute, join, relative, resolve } from 'pathe'
66
import{useNitro}from'@nuxt/kit'
77
import{resolveModulePath}from'exsolve'
88
import{defineEnv}from'unenv'
9+
importescapeStringRegexpfrom'escape-string-regexp'
910

1011
exportfunctionEnvironmentsPlugin(nuxt:Nuxt):Plugin{
1112
constfileNames=withoutLeadingSlash(join(nuxt.options.app.buildAssetsDir,'[hash].js'))
@@ -80,7 +81,12 @@ export function EnvironmentsPlugin (nuxt: Nuxt): Plugin {
8081
{
8182
name:'nuxt:client:aliases',
8283
enforce:'post',
83-
resolveId:source=>clientAliases[source],
84+
resolveId:{
85+
filter:{
86+
id:Object.keys(clientAliases).map(id=>newRegExp('^'+escapeStringRegexp(id)+'$')),
87+
},
88+
handler:source=>clientAliases[source],
89+
},
8490
},
8591
]
8692
}elseif(environment.name==='ssr'){

‎packages/vite/src/plugins/public-dirs.ts‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { isCSSRequest } from 'vite'
77
importtype{Plugin}from'vite'
88

99
constPREFIX='virtual:public?'
10+
constPREFIX_RE=/^virtual:public\?/
1011
constCSS_URL_RE=/url\((\/[^)]+)\)/g
1112
constCSS_URL_SINGLE_RE=/url\(\/[^)]+\)/
1213
constRENDER_CHUNK_RE=/(?<==)['"`]/
@@ -51,17 +52,21 @@ export const PublicDirsPlugin = (options: VitePublicDirsPluginOptions): Plugin[]
5152
},
5253
load:{
5354
order:'pre',
55+
filter:{
56+
id:PREFIX_RE,
57+
},
5458
handler(id){
55-
if(id.startsWith(PREFIX)){
56-
return`import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(${JSON.stringify(decodeURIComponent(id.slice(PREFIX.length)))})`
57-
}
59+
return`import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(${JSON.stringify(decodeURIComponent(id.slice(PREFIX.length)))})`
5860
},
5961
},
6062
resolveId:{
6163
order:'post',
64+
filter:{
65+
id:{
66+
exclude:[/^\/__skip_vite$/,/^[^/]/,/^\/@fs/],
67+
},
68+
},
6269
handler(id){
63-
if(id==='/__skip_vite'||id[0]!=='/'||id.startsWith('/@fs')){return}
64-
6570
if(resolveFromPublicAssets(id)){
6671
returnPREFIX+encodeURIComponent(id)
6772
}

‎packages/vite/src/plugins/ssr-styles.ts‎

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,11 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
9898
return
9999
}
100100

101-
if(id==='#build/css'||id.endsWith('.vue')||isCSS(id)){
102-
constres=awaitthis.resolve(id,importer,{ ..._options,skipSelf:true})
103-
if(res){
104-
return{
105-
...res,
106-
moduleSideEffects:false,
107-
}
101+
constres=awaitthis.resolve(id,importer,{ ..._options,skipSelf:true})
102+
if(res){
103+
return{
104+
...res,
105+
moduleSideEffects:false,
108106
}
109107
}
110108
},

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp