react-prod-sourcemaps icon indicating copy to clipboard operation
react-prod-sourcemaps copied to clipboard

Add `x_google_ignoreList` (Ignore-listing code) support to sourcemaps

Open 0xdevalias opened this issue 2 years ago • 1 comments

Introduce the x_google_ignoreList extension in the sourcemaps generated by this project. This will facilitate a more streamlined debugging experience in Chrome (and other supporting browsers) by automatically filtering out framework and dependency code.

Benefit

Implementing x_google_ignoreList in the sourcemaps will align this project with modern web development practices, offering a more focused and efficient debugging experience for developers using Chrome DevTools. This change will particularly benefit those who regularly engage in debugging complex applications with numerous dependencies.

Background Context

  • Sourcemaps added to React:
    • https://github.com/facebook/react/issues/20186
      • https://github.com/facebook/react/pull/26446
  • https://developer.chrome.com/blog/devtools-modern-web-debugging/#just-my-code
    • The ignore-listing is enabled by populating an extra x_google_ignoreList field in the source map that Angular generates when compiling the project. The Chrome DevTools team encourages other framework authors to implement a similar change. Refer to the Case Study: Better Angular Debugging with DevTools post for more details.

  • https://developer.chrome.com/blog/devtools-better-angular-debugging/#ignore-listing-code
    • Ignore-listing code When debugging applications using Chrome DevTools, authors generally only want to see just their code, not that of the framework underneath or some dependency tucked away in the node_modules folder.

      To achieve this, the DevTools team has introduced an extension to source maps, called x_google_ignoreList. This extension is used to identify third-party sources such as framework code or bundler-generated code. When a framework uses this extension, authors now automatically avoid code that they don't want to see or step through without having to manually configure this beforehand.

      The x_google_ignoreList source map extension is supported by Chrome DevTools starting with Chrome 106.

  • https://developer.chrome.com/articles/x-google-ignore-list/
    • The ignoreList source map extension

      Improve debugging experience in Chrome DevTools with the ignoreList source map extension.

See Also

  • https://github.com/facebook/react/issues/27774
  • https://github.com/vercel/next.js/issues/41370
    • https://github.com/vercel/next.js/discussions/41371
  • https://github.com/vuejs/rfcs/discussions/607
  • https://github.com/preactjs/preact/issues/4225
  • https://github.com/sveltejs/svelte/issues/9740
  • https://github.com/developit/microbundle/issues/1066
  • https://github.com/angular/angular-cli/pull/23545
  • https://nuxt.com/blog/v3-3#better-logging-in-browser-devtools
    • https://github.com/nuxt/nuxt/pull/19243
  • https://vitejs.dev/config/server-options.html#server-sourcemapignorelist
    • https://github.com/vitejs/vite/pull/12174
    • https://github.com/vitejs/vite/pull/12633
    • https://github.com/vitejs/vite/pull/12694
  • https://rollupjs.org/configuration-options/#output-sourcemapignorelist
    • https://github.com/rollup/rollup/issues/4847
    • https://github.com/rollup/rollup/pull/4846
    • https://github.com/rollup/rollup/pull/4848
    • https://github.com/rollup/rollup/pull/4926
  • https://github.com/Rich-Harris/magic-string/issues/241
    • https://github.com/Rich-Harris/magic-string/pull/240
    • https://github.com/Rich-Harris/magic-string/pull/243

Tangentially related issues for improving modern debugging support:

  • https://github.com/facebook/react/issues/25742

0xdevalias avatar Dec 01 '23 22:12 0xdevalias

  • https://developer.chrome.com/blog/new-in-devtools-120/#ignore-list-spec
    • The source maps specification has adopted the ignoreList field instead of x_google_ignoreList and DevTools now supports the new name with a fallback for the old one. Frameworks and bundlers can now use the new field name.

Originally posted by @0xdevalias in https://github.com/facebook/react/issues/27774#issuecomment-1836969520

0xdevalias avatar Dec 02 '23 01:12 0xdevalias