fix(nitro): support ~/@ aliases and explicitly externalize buildDir

This commit is contained in:
Pooya Parsa 2021-06-04 22:04:08 +02:00
parent 8aae9ef7b2
commit f98be4bfed
2 changed files with 31 additions and 23 deletions

View File

@ -198,6 +198,10 @@ export const getRollupConfig = (nitroContext: NitroContext) => {
'#nitro-renderer': require.resolve(resolve(nitroContext._internal.runtimeDir, 'app', renderer)), '#nitro-renderer': require.resolve(resolve(nitroContext._internal.runtimeDir, 'app', renderer)),
'#nitro-vue-renderer': vue2ServerRenderer, '#nitro-vue-renderer': vue2ServerRenderer,
'#build': nitroContext._nuxt.buildDir, '#build': nitroContext._nuxt.buildDir,
'~': nitroContext._nuxt.srcDir,
'@/': nitroContext._nuxt.srcDir,
'~~': nitroContext._nuxt.rootDir,
'@@/': nitroContext._nuxt.rootDir,
...env.alias ...env.alias
} }
})) }))
@ -214,21 +218,22 @@ export const getRollupConfig = (nitroContext: NitroContext) => {
rollupConfig.plugins.push(externals(defu(nitroContext.externals as any, { rollupConfig.plugins.push(externals(defu(nitroContext.externals as any, {
outDir: nitroContext.output.serverDir, outDir: nitroContext.output.serverDir,
moduleDirectories, moduleDirectories,
ignore: [ external: [
...(nitroContext._nuxt.dev ? [nitroContext._nuxt.buildDir] : [])
],
inline: [
'#',
'~',
'@/',
'~~',
'@@/',
'virtual:',
nitroContext._internal.runtimeDir, nitroContext._internal.runtimeDir,
...((!nitroContext._nuxt.dev && [
// prod
nitroContext._nuxt.srcDir, nitroContext._nuxt.srcDir,
nitroContext._nuxt.rootDir, nitroContext._nuxt.rootDir,
nitroContext._nuxt.buildDir,
'vue',
'@vue/',
'@nuxt/',
'#',
'virtual:'
]) || []),
nitroContext._nuxt.serverDir, nitroContext._nuxt.serverDir,
...nitroContext.middleware.map(m => m.handle) ...nitroContext.middleware.map(m => m.handle),
...(nitroContext._nuxt.dev ? [] : ['vue', '@vue/', '@nuxt/'])
], ],
traceOptions: { traceOptions: {
base: '/', base: '/',

View File

@ -4,7 +4,8 @@ import { nodeFileTrace, NodeFileTraceOptions } from '@vercel/nft'
import type { Plugin } from 'rollup' import type { Plugin } from 'rollup'
export interface NodeExternalsOptions { export interface NodeExternalsOptions {
ignore?: string[] inline?: string[]
external?: string[]
outDir?: string outDir?: string
trace?: boolean trace?: boolean
traceOptions?: NodeFileTraceOptions traceOptions?: NodeFileTraceOptions
@ -25,16 +26,18 @@ export function externals (opts: NodeExternalsOptions): Plugin {
// Normalize from node_modules // Normalize from node_modules
const _id = id.split('node_modules/').pop() const _id = id.split('node_modules/').pop()
// Skip checks if is an explicit external
if (!opts.external.find(i => _id.startsWith(i) || id.startsWith(i))) {
// Resolve relative paths and exceptions // Resolve relative paths and exceptions
// Ensure to take absolute and relative id // Ensure to take absolute and relative id
if (_id.startsWith('.') || opts.ignore.find(i => _id.startsWith(i) || id.startsWith(i))) { if (_id.startsWith('.') || opts.inline.find(i => _id.startsWith(i) || id.startsWith(i))) {
return null return null
} }
// Bundle ts // Bundle ts
if (_id.endsWith('.ts')) { if (_id.endsWith('.ts')) {
return null return null
} }
}
// Try to resolve for nft // Try to resolve for nft
if (opts.trace !== false) { if (opts.trace !== false) {