feat: allow disabling sourcemap generation (#4509)

This commit is contained in:
Daniel Roe 2022-04-22 16:35:42 +01:00 committed by GitHub
parent 4c6c027014
commit 650d12fa9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 70 additions and 58 deletions

View File

@ -74,8 +74,8 @@ export default defineNuxtModule<Partial<AutoImportsOptions>>({
})
} else {
// Transform to inject imports in production mode
addVitePlugin(TransformPlugin.vite({ ctx, options }))
addWebpackPlugin(TransformPlugin.webpack({ ctx, options }))
addVitePlugin(TransformPlugin.vite({ ctx, options, sourcemap: nuxt.options.sourcemap }))
addWebpackPlugin(TransformPlugin.webpack({ ctx, options, sourcemap: nuxt.options.sourcemap }))
}
const regenerateAutoImports = async () => {

View File

@ -4,7 +4,7 @@ import { parseQuery, parseURL } from 'ufo'
import { Unimport } from 'unimport'
import { AutoImportsOptions } from '@nuxt/schema'
export const TransformPlugin = createUnplugin(({ ctx, options }: {ctx: Unimport, options: Partial<AutoImportsOptions> }) => {
export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx: Unimport, options: Partial<AutoImportsOptions>, sourcemap?: boolean }) => {
return {
name: 'nuxt:auto-imports-transform',
enforce: 'post',
@ -39,7 +39,7 @@ export const TransformPlugin = createUnplugin(({ ctx, options }: {ctx: Unimport,
}
return {
code,
map: s.generateMap({ source: id, includeContent: true })
map: sourcemap && s.generateMap({ source: id, includeContent: true })
}
}
}

View File

@ -9,6 +9,7 @@ import { pascalCase } from 'scule'
interface LoaderOptions {
getComponents(): Component[]
mode: 'server' | 'client'
sourcemap?: boolean
}
export const loaderPlugin = createUnplugin((options: LoaderOptions) => ({
@ -22,20 +23,8 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => ({
return pathname.endsWith('.vue') && (query.type === 'template' || !!query.macro || !search)
},
transform (code, id) {
return transform(code, id, options.getComponents(), options.mode)
}
}))
const components = options.getComponents()
function findComponent (components: Component[], name: string, mode: LoaderOptions['mode']) {
const id = pascalCase(name).replace(/["']/g, '')
const component = components.find(component => id === component.pascalName && ['all', mode, undefined].includes(component.mode))
if (!component && components.some(component => id === component.pascalName)) {
return components.find(component => component.pascalName === 'ServerPlaceholder')
}
return component
}
function transform (code: string, id: string, components: Component[], mode: LoaderOptions['mode']) {
let num = 0
const imports = new Set<string>()
const map = new Map<Component, string>()
@ -43,7 +32,7 @@ function transform (code: string, id: string, components: Component[], mode: Loa
// replace `_resolveComponent("...")` to direct import
s.replace(/(?<=[ (])_?resolveComponent\(["'](lazy-|Lazy)?([^'"]*?)["']\)/g, (full, lazy, name) => {
const component = findComponent(components, name, mode)
const component = findComponent(components, name, options.mode)
if (component) {
const identifier = map.get(component) || `__nuxt_component_${num++}`
map.set(component, identifier)
@ -71,7 +60,17 @@ function transform (code: string, id: string, components: Component[], mode: Loa
if (s.hasChanged()) {
return {
code: s.toString(),
map: s.generateMap({ source: id, includeContent: true })
map: options.sourcemap && s.generateMap({ source: id, includeContent: true })
}
}
}
}))
function findComponent (components: Component[], name: string, mode: LoaderOptions['mode']) {
const id = pascalCase(name).replace(/["']/g, '')
const component = components.find(component => id === component.pascalName && ['all', mode, undefined].includes(component.mode))
if (!component && components.some(component => id === component.pascalName)) {
return components.find(component => component.pascalName === 'ServerPlaceholder')
}
return component
}

View File

@ -132,6 +132,7 @@ export default defineNuxtModule<ComponentsOptions>({
nuxt.hook('vite:extendConfig', (config, { isClient }) => {
config.plugins = config.plugins || []
config.plugins.push(loaderPlugin.vite({
sourcemap: nuxt.options.sourcemap,
getComponents,
mode: isClient ? 'client' : 'server'
}))
@ -140,6 +141,7 @@ export default defineNuxtModule<ComponentsOptions>({
configs.forEach((config) => {
config.plugins = config.plugins || []
config.plugins.push(loaderPlugin.webpack({
sourcemap: nuxt.options.sourcemap,
getComponents,
mode: config.name === 'client' ? 'client' : 'server'
}))

View File

@ -55,6 +55,7 @@ export async function initNitro (nuxt: Nuxt) {
.concat(nuxt.options._generate ? ['/', ...nuxt.options.generate.routes] : [])
.concat(nuxt.options.ssr === false ? ['/', '/200', '/404'] : [])
},
sourcemap: nuxt.options.sourcemap,
externals: {
inline: [
...(nuxt.options.dev ? [] : ['vue', '@vue/', '@nuxt/', nuxt.options.buildDir]),

View File

@ -63,8 +63,8 @@ async function initNuxt (nuxt: Nuxt) {
addWebpackPlugin(ImportProtectionPlugin.webpack(config))
// Add unctx transform
addVitePlugin(UnctxTransformPlugin(nuxt).vite())
addWebpackPlugin(UnctxTransformPlugin(nuxt).webpack())
addVitePlugin(UnctxTransformPlugin(nuxt).vite({ sourcemap: nuxt.options.sourcemap }))
addWebpackPlugin(UnctxTransformPlugin(nuxt).webpack({ sourcemap: nuxt.options.sourcemap }))
// Init user modules
await nuxt.callHook('modules:before', { nuxt } as ModuleContainer)

View File

@ -12,7 +12,7 @@ export const UnctxTransformPlugin = (nuxt: Nuxt) => {
nuxt.hook('app:resolve', (_app) => { app = _app })
nuxt.hook('pages:middleware:extend', (_middlewares) => { middleware = _middlewares })
return createUnplugin(() => ({
return createUnplugin((options: { sourcemap?: boolean } = {}) => ({
name: 'unctx:transfrom',
enforce: 'post',
transformInclude (id) {
@ -23,7 +23,7 @@ export const UnctxTransformPlugin = (nuxt: Nuxt) => {
if (result) {
return {
code: result.code,
map: result.magicString.generateMap({ source: id, includeContent: true })
map: options.sourcemap && result.magicString.generateMap({ source: id, includeContent: true })
}
}
}

View File

@ -7,6 +7,7 @@ import MagicString from 'magic-string'
export interface TransformMacroPluginOptions {
macros: Record<string, string>
dev?: boolean
sourcemap?: boolean
}
export const TransformMacroPlugin = createUnplugin((options: TransformMacroPluginOptions) => {
@ -24,7 +25,7 @@ export const TransformMacroPlugin = createUnplugin((options: TransformMacroPlugi
function result () {
if (s.hasChanged()) {
return { code: s.toString(), map: s.generateMap({ source: id, includeContent: true }) }
return { code: s.toString(), map: options.sourcemap && s.generateMap({ source: id, includeContent: true }) }
}
}

View File

@ -57,6 +57,7 @@ export default defineNuxtModule({
// Extract macros from pages
const macroOptions: TransformMacroPluginOptions = {
dev: nuxt.options.dev,
sourcemap: nuxt.options.sourcemap,
macros: {
definePageMeta: 'meta'
}

View File

@ -22,6 +22,12 @@ export default {
return map[val] || (get('vite') === false ? map.webpack : map.vite)
},
},
/**
* Whether to generate sourcemaps.
*
* @version 3
*/
sourcemap: true,
/**
* Shared build configuration.
* @version 2
@ -132,7 +138,7 @@ export default {
* @version 2
*/
cssSourceMap: {
$resolve: (val, get) => val ?? get('dev')
$resolve: (val, get) => val ?? get('sourcemap') ?? get('dev')
},
/**
@ -242,8 +248,8 @@ export default {
]
for (const name of styleLoaders) {
const loader = val[name]
if (loader && loader.sourceMap === undefined) {
loader.sourceMap = Boolean(get('build.cssSourceMap'))
if (loader && loader.sourcemap === undefined) {
loader.sourcemap = Boolean(get('build.cssSourceMap'))
}
}
return val
@ -315,7 +321,7 @@ export default {
*
* @see [terser-webpack-plugin documentation](https://github.com/webpack-contrib/terser-webpack-plugin)
*
* @note Enabling sourceMap will leave `//# sourceMappingURL` linking comment at
* @note Enabling sourcemap will leave `//# sourcemappingURL` linking comment at
* the end of each output file if webpack `config.devtool` is set to `source-map`.
* @version 2
*/
@ -493,7 +499,7 @@ export default {
return postcssOptions
}
},
sourceMap: undefined,
sourcemap: undefined,
implementation: undefined,
order: ''
},

View File

@ -5,6 +5,7 @@ import MagicString from 'magic-string'
interface DynamicBasePluginOptions {
globalPublicPath?: string
sourcemap?: boolean
}
export const RelativeAssetPlugin = function (): Plugin {
@ -95,7 +96,7 @@ export const DynamicBasePlugin = createUnplugin(function (options: DynamicBasePl
if (s.hasChanged()) {
return {
code: s.toString(),
map: s.generateMap({ source: id, includeContent: true })
map: options.sourcemap && s.generateMap({ source: id, includeContent: true })
}
}
}

View File

@ -65,7 +65,7 @@ export async function bundle (nuxt: Nuxt) {
},
plugins: [
virtual(nuxt.vfs),
DynamicBasePlugin.vite()
DynamicBasePlugin.vite({ sourcemap: nuxt.options.sourcemap })
],
vue: {
reactivityTransform: nuxt.options.experimental.reactivityTransform

View File

@ -34,6 +34,7 @@ export async function bundle (nuxt: Nuxt) {
// Configure compilers
const compilers = webpackConfigs.map((config) => {
config.plugins.push(DynamicBasePlugin.webpack({
sourcemap: nuxt.options.sourcemap,
globalPublicPath: '__webpack_public_path__'
}))