Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DataViews: WP Specific build #66825

Merged
merged 7 commits into from
Nov 27, 2024
Merged

DataViews: WP Specific build #66825

merged 7 commits into from
Nov 27, 2024

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Nov 7, 2024

fixes #65126
Related #63657

What?

This PR explores a temporary solution to conflicts and potential issues when using the "dataviews" package in WordPress while building your scripts using wp-scripts.

The issue is that you can endup with a version of DataViews that is more recent that the wordpress/components it could be relying on (because the components dependency is externalized) which causes JS errors.

The approach to fix this problem in the current PR is to ship within the npm package a "wp" specific build of the dataviews package.

So people using dataviews for their WordPress plugins would do

import something from @wordpress/dataviews/wp

instead of just

import something from @wordpress/dataviews

And the trick here is that the "wp" build target in the npm package is already "pre bundled" and includes all the necessary wp-components dependency and its sub dependencies.

Downside:

  • It makes the JS bundle of the plugin a bit bigger because components used in dataviews would be deprecated. DataViews is not using a lot of components and despite that the bundle is still a bit big. There might be some issues to look at in the components package but that's separate.

Testing Instructions

This one is a bit hard to test (and I didn't test yet) but here's the idea:

  • Build the packages locally npm run build
  • Navigate to the dataviews package and type npm link (to create a global symlink for the package)
  • Navigate into a custom plugin using dataviews and building the plugin wp-scripts and use the dataviews dependency from the global symlink by running this in the plugin folder npm run link @wordpress/dataviews
  • Replace all imports of dataviews by @wordpress/dataviews/wp
  • The errors should be gone.

@youknowriad youknowriad self-assigned this Nov 7, 2024
Copy link

github-actions bot commented Nov 7, 2024

Size Change: 0 B

Total Size: 1.82 MB

ℹ️ View Unchanged
Filename Size
build-module/a11y/index.min.js 482 B
build-module/block-library/file/view.min.js 447 B
build-module/block-library/image/view.min.js 1.78 kB
build-module/block-library/navigation/view.min.js 1.16 kB
build-module/block-library/query/view.min.js 742 B
build-module/block-library/search/view.min.js 616 B
build-module/interactivity-router/index.min.js 3.03 kB
build-module/interactivity/debug.min.js 17.2 kB
build-module/interactivity/index.min.js 13.6 kB
build/a11y/index.min.js 952 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1 kB
build/block-directory/style.css 1 kB
build/block-editor/content-rtl.css 4.41 kB
build/block-editor/content.css 4.41 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/index.min.js 257 kB
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 kB
build/block-library/blocks/archives/editor-rtl.css 84 B
build/block-library/blocks/archives/editor.css 83 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 265 B
build/block-library/blocks/button/editor.css 265 B
build/block-library/blocks/button/style-rtl.css 555 B
build/block-library/blocks/button/style.css 555 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 345 B
build/block-library/blocks/buttons/style.css 345 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 B
build/block-library/blocks/categories/editor-rtl.css 132 B
build/block-library/blocks/categories/editor.css 131 B
build/block-library/blocks/categories/style-rtl.css 152 B
build/block-library/blocks/categories/style.css 152 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 139 B
build/block-library/blocks/code/style.css 139 B
build/block-library/blocks/code/theme-rtl.css 122 B
build/block-library/blocks/code/theme.css 122 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-author-name/style-rtl.css 72 B
build/block-library/blocks/comment-author-name/style.css 72 B
build/block-library/blocks/comment-content/style-rtl.css 120 B
build/block-library/blocks/comment-content/style.css 120 B
build/block-library/blocks/comment-date/style-rtl.css 65 B
build/block-library/blocks/comment-date/style.css 65 B
build/block-library/blocks/comment-edit-link/style-rtl.css 70 B
build/block-library/blocks/comment-edit-link/style.css 70 B
build/block-library/blocks/comment-reply-link/style-rtl.css 71 B
build/block-library/blocks/comment-reply-link/style.css 71 B
build/block-library/blocks/comment-template/style-rtl.css 200 B
build/block-library/blocks/comment-template/style.css 199 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 228 B
build/block-library/blocks/comments-pagination/editor.css 217 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 837 B
build/block-library/blocks/comments/editor.css 836 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 637 B
build/block-library/blocks/cover/editor-rtl.css 631 B
build/block-library/blocks/cover/editor.css 631 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 331 B
build/block-library/blocks/embed/editor.css 331 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 357 B
build/block-library/blocks/form-input/style.css 357 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 946 B
build/block-library/blocks/gallery/editor.css 951 B
build/block-library/blocks/gallery/style-rtl.css 1.83 kB
build/block-library/blocks/gallery/style.css 1.82 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 334 B
build/block-library/blocks/group/editor.css 334 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 799 B
build/block-library/blocks/image/editor.css 799 B
build/block-library/blocks/image/style-rtl.css 1.59 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 139 B
build/block-library/blocks/latest-posts/editor.css 138 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 B
build/block-library/blocks/list/style-rtl.css 107 B
build/block-library/blocks/list/style.css 107 B
build/block-library/blocks/loginout/style-rtl.css 61 B
build/block-library/blocks/loginout/style.css 61 B
build/block-library/blocks/media-text/editor-rtl.css 321 B
build/block-library/blocks/media-text/editor.css 320 B
build/block-library/blocks/media-text/style-rtl.css 552 B
build/block-library/blocks/media-text/style.css 550 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 644 B
build/block-library/blocks/navigation-link/editor.css 645 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.2 kB
build/block-library/blocks/navigation/editor.css 2.2 kB
build/block-library/blocks/navigation/style-rtl.css 2.24 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 B
build/block-library/blocks/page-list/style-rtl.css 192 B
build/block-library/blocks/page-list/style.css 192 B
build/block-library/blocks/paragraph/editor-rtl.css 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 B
build/block-library/blocks/post-author-biography/style-rtl.css 74 B
build/block-library/blocks/post-author-biography/style.css 74 B
build/block-library/blocks/post-author-name/style-rtl.css 69 B
build/block-library/blocks/post-author-name/style.css 69 B
build/block-library/blocks/post-author/editor-rtl.css 107 B
build/block-library/blocks/post-author/editor.css 107 B
build/block-library/blocks/post-author/style-rtl.css 188 B
build/block-library/blocks/post-author/style.css 189 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 527 B
build/block-library/blocks/post-comments-form/style.css 528 B
build/block-library/blocks/post-content/style-rtl.css 61 B
build/block-library/blocks/post-content/style.css 61 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 155 B
build/block-library/blocks/post-excerpt/style.css 155 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 347 B
build/block-library/blocks/post-featured-image/style.css 347 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 399 B
build/block-library/blocks/post-template/style.css 398 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 70 B
build/block-library/blocks/post-time-to-read/style.css 70 B
build/block-library/blocks/post-title/style-rtl.css 162 B
build/block-library/blocks/post-title/style.css 162 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 154 B
build/block-library/blocks/query-pagination/editor.css 154 B
build/block-library/blocks/query-pagination/style-rtl.css 237 B
build/block-library/blocks/query-pagination/style.css 237 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 426 B
build/block-library/blocks/query/editor.css 426 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 236 B
build/block-library/blocks/read-more/style-rtl.css 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 199 B
build/block-library/blocks/search/editor.css 199 B
build/block-library/blocks/search/style-rtl.css 660 B
build/block-library/blocks/search/style.css 658 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-tagline/style-rtl.css 65 B
build/block-library/blocks/site-tagline/style.css 65 B
build/block-library/blocks/site-title/editor-rtl.css 85 B
build/block-library/blocks/site-title/editor.css 85 B
build/block-library/blocks/site-title/style-rtl.css 143 B
build/block-library/blocks/site-title/style.css 143 B
build/block-library/blocks/social-link/editor-rtl.css 309 B
build/block-library/blocks/social-link/editor.css 309 B
build/block-library/blocks/social-links/editor-rtl.css 729 B
build/block-library/blocks/social-links/editor.css 727 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.5 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table-of-contents/style-rtl.css 83 B
build/block-library/blocks/table-of-contents/style.css 83 B
build/block-library/blocks/table/editor-rtl.css 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/editor-rtl.css 144 B
build/block-library/blocks/tag-cloud/editor.css 144 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 368 B
build/block-library/blocks/template-part/editor.css 368 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 126 B
build/block-library/blocks/term-description/style.css 126 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 441 B
build/block-library/blocks/video/editor.css 442 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.08 kB
build/block-library/common.css 1.08 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.7 kB
build/block-library/editor.css 11.7 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 221 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 15 kB
build/block-library/style.css 15 kB
build/block-library/theme-rtl.css 708 B
build/block-library/theme.css 712 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.9 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 227 kB
build/components/style-rtl.css 12.4 kB
build/components/style.css 12.4 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 3.08 kB
build/core-data/index.min.js 74.3 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.69 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.66 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 13.4 kB
build/edit-post/style-rtl.css 2.76 kB
build/edit-post/style.css 2.75 kB
build/edit-site/index.min.js 219 kB
build/edit-site/posts-rtl.css 7.58 kB
build/edit-site/posts.css 7.58 kB
build/edit-site/style-rtl.css 13.4 kB
build/edit-site/style.css 13.4 kB
build/edit-widgets/index.min.js 17.7 kB
build/edit-widgets/style-rtl.css 4.09 kB
build/edit-widgets/style.css 4.09 kB
build/editor/index.min.js 112 kB
build/editor/style-rtl.css 9.4 kB
build/editor/style.css 9.41 kB
build/element/index.min.js 4.82 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.05 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.65 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 852 B
build/list-reusable-blocks/style.css 852 B
build/media-utils/index.min.js 3.58 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.62 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.37 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.86 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 554 B
build/preferences/style.css 554 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 961 B
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.55 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.3 kB
build/router/index.min.js 2.11 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.04 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.9 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 556 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/vips/index.min.js 36.2 kB
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

Copy link

github-actions bot commented Nov 7, 2024

Flaky tests detected in e6108cc.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/11724727915
📝 Reported issues:

@louwie17
Copy link
Contributor

louwie17 commented Nov 8, 2024

I tested this using the WP Parse.ly plugin with this existing branch that implements a simple version of Dataviews. I didn't work on that branch, but for now it was the easiest to test with.
Although I couldn't get it working, the main blocker was that I ran into this error: Uncaught Error: Cannot find module 'react' and I am not a bundler expert, so couldn't figure out quickly why this was happening.

I did notice a couple other things:

  • I had to update the DependencyExtractionWebpackPlugin locally to bundle in @wordpress/dataviews/wp specifically. If we go ahead with this we should also add @wordpress/dataviews/wp to this list:
  • The bundles file size is 3.5mb at the moment which is quite big ( although not minimized ), I wonder if there is any way we can prune that down a bit? For example not bundling in @wordpress components where we are not using experimental API's ( as those APIs won't mismatch ). Packages like data, icons, i18n could likely be excluded then.

@youknowriad
Copy link
Contributor Author

I think I fixed the build in the last commit, so you won't have to the "react" error.

@louwie17
Copy link
Contributor

I think I fixed the build in the last commit, so you won't have to the "react" error.

Nice!! I tested it again, and it indeed worked correctly 💯 The build file also dropped in size a good chunk from 3.5mb to 2.5mb

Only two items that would still be of benefit I think:

  • Updating the BUNDLED_PACKAGES list of the dependency extraction plugin, as mentioned above.
  • ( could be ignored ) Adding @wordpress/dataviews/wp import TS support, although this may already be working. I initially had a TS error when using @wordpress/dataviews/wp, but it seems to work fine now 🤞

Outside of that, I would be happy to move ahead with this. 2.5mb is still quite drastic in size, so we should emphasize this for plugins that want to make use of it.
I think there is still room for us to optimize this though, and only bundle in the experimental components. Given anything outside of experimental should stay stable given WP backwards compatibility promise.
For example, the Popover component relies on framer-motion which gets included pretty heavily and adds around 200kb.

@youknowriad
Copy link
Contributor Author

Outside of that, I would be happy to move ahead with this. 2.5mb is still quite drastic in size, so we should emphasize this for plugins that want to make use of it.

I'm personally surprised by the size as well. I wonder if "tree-shaking" is working properly. If feels the components package might be too big or not tree-shakable properly. It could be a good opportunity to understand why here. cc @ciampo @mirka

I think there is still room for us to optimize this though, and only bundle in the experimental components. Given anything outside of experimental should stay stable given WP backwards compatibility promise.

I'm not a fan of this idea personally, I'd rather use dependencies consistently and not try to "split" a package.

( could be ignored ) Adding @wordpress/dataviews/wp import TS support, although this may already be working. I initially had a TS error when using @wordpress/dataviews/wp, but it seems to work fine now 🤞

Not sure exactly how to validate that. I didn't do anything specific to indicate that the wp import are the same as the top level import.

Updating the BUNDLED_PACKAGES list of the dependency extraction plugin, as #66825 (comment).

yes, we need to do that.

@louwie17
Copy link
Contributor

I wonder if "tree-shaking" is working properly. If feels the components package might be too big or not tree-shakable properly. It could be a good opportunity to understand why here.

I think it is definitely doing some tree shaking, because not "all" of the components package gets bundled in, there is still quite a few items that are not in there. From a quick search items like alignment-matrix-control, confirm-dialog, or custom-select-control are not included in the bundle.

Not sure exactly how to validate that. I didn't do anything specific to indicate that the wp import are the same as the top level import.

It could also be that I only saw the error first because the npm link command didn't work correctly, as I remember having to do it a second time as my npm versions were different.
To test it though, you just need to import @wordpress/dataviews/wp in a TS file in a project were /dataviews is linked and see if it errors.

@ntsekouras
Copy link
Contributor

Would this PR also fix this: #65126?

@youknowriad
Copy link
Contributor Author

@ntsekouras if they switch to @wordpress/dataviews/wp probably yeah

@Tropicalista
Copy link

Any news on this?

@youknowriad youknowriad marked this pull request as ready for review November 19, 2024 08:28
Copy link

github-actions bot commented Nov 19, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: youknowriad <[email protected]>
Co-authored-by: sirreal <[email protected]>
Co-authored-by: luisherranz <[email protected]>
Co-authored-by: jsnajdr <[email protected]>
Co-authored-by: louwie17 <[email protected]>
Co-authored-by: ntsekouras <[email protected]>
Co-authored-by: Tropicalista <[email protected]>
Co-authored-by: mirka <[email protected]>
Co-authored-by: manzoorwanijk <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@youknowriad
Copy link
Contributor Author

This is mostly ready, I think we need to test it extensively though so I would appreciate any help.

Ideally as well, we should automate this list #66825 (comment) before merging as otherwise, any dependency change to components or something could break this again. I didn't find the right scripting to do it yet though.

@jsnajdr
Copy link
Member

jsnajdr commented Nov 21, 2024

I'm personally surprised by the size as well. I wonder if "tree-shaking" is working properly. If feels the components package might be too big or not tree-shakable properly. It could be a good opportunity to understand why here.

I tried to create a bundle that imports only the private APIs (of which Menu is a part) and the bundle layout looks like this:

Screenshot 2024-11-21 at 9 25 55

Two things to see here:

  • only half of the bundle is actual @wordpress/components code. The other half are the underlying libraries: Ariakit, Framer Motion, Emotion.
  • all private APIs are exported as properties of one object and are not treeshakable. If you use only Menu, you still bundle all other private APIs.

The dataviews/wp build bundles also several components singletons, namely React contexts for SlotFill, Emotion CacheProvider, and various Ariakit contexts. That is going to cause problems when the global wp.components script interacts in any way with the bundled components copy. Registering slots and fills will be unreliable, Emotion will register styles twice and maybe the two caches will conflict with each other.

Also, the dataviews/wp script is basically the dataviews and components libraries merged together into one. If dataviews has npm dependencies A and B and components has dependencies C and D, then the resulting dataviews/wp package should have dependencies A, B, C and D. This is not correctly expressed in dataviews/package.json. It not guaranteed that the C and D dependencies will be at the place in node_modules where they are expected to be.

@youknowriad
Copy link
Contributor Author

Also, the dataviews/wp script is basically the dataviews and components libraries merged together into one.

Yes, this is basically the goal here. I should be able to bundle a specific version of "components" in one part of the screen if I want without issues IMO.

@jsnajdr
Copy link
Member

jsnajdr commented Nov 21, 2024

I should be able to bundle a specific version of "components" in one part of the screen if I want without issues

One of the problems that prevent doing that is that the components library is very big and contains a diverse set of various sub-libraries. All the singletons, for example, are in parts that could be separate libraries. @wordpress/slot-fill could be a very neat standalone package. And Ariakit, Emotion and Framer Motion could be separate scripts registered with wp_register_script ans ariakit, emotion and motion, and could expose globals like Ariakit etc. There's a lot of WordPress prior art for this, we have scripts like react, lodash, backbone, jquery, underscore or masonry. Then components could be a library that depends on these "platform" libraries, and could be less than half the current size. Much easier to bundle without worries and with efficient tree shaking.

Of course, we would create a new set of potential nightmares with versioning the platform libraries, dealing with breaking changes (in major semver updates), deprecations etc. Not sure if that's a good trade-off or not.

I'm sure that @ciampo and @mirka already discussed this idea many times 🙂

@youknowriad
Copy link
Contributor Author

Then components could be a library that depends on these "platform" libraries, and could be less than half the current size. Much easier to bundle without worries and with efficient tree shaking.

That would solve the problem IMO, for instance slot-fill could also introduce new APIs that will be used by dataviews creating similar issues.

I would love some testing to confirm whether we have actual issues or not. In my small testing, I didn't see any issues with having two bundles of components package (I mean aside the bundle size, but that could be acceptable).

Also, the sub dependencies here are actually used in the parts that are imported by dataviews, so that's why they are not tree-shaken.

@mirka
Copy link
Member

mirka commented Nov 21, 2024

I should be able to bundle a specific version of "components" in one part of the screen if I want without issues IMO.

I didn't see any issues with having two bundles of components package

CSS based on static class names (e.g. .components-button) are going to clash unless loaded in isolation (iframe) or re-scoped. This may resolve itself if we fully migrate to CSS modules with dynamically generated classes at compile time.

@manzoorwanijk
Copy link
Contributor

Given the complications involved when not externalizing the dataviews package into a WP bundle just like other packages, may be we should think about it a bit differently.

Suggestion

Bundle dataviews on its own, just like our other packages, and mark it as experimental or beta. That way, all the problems we are dealing with will vanish, and its usage will become easier, and we will also get more feedback.

The reason for my suggestion is that it's becoming very hard to actually use dataviews in its current form. For example, in Jetpack, we are dealing with the same and its usage complicates things. It means that we are not able to properly use the package in order to provide feedback.

@youknowriad
Copy link
Contributor Author

I understand where you're coming from and I agree that it's not really possible to use the dataviews package properly today in a Gutenberg plugin, and this is why I think solving this PR is high priority.

I agree with @mirka that the styles conflicts is probably the only issue that we'll have but it's also a very small and acceptable one maybe? (depends on the breakage)

Bundle dataviews on its own, just like our other packages, and mark it as experimental or beta. That way, all the problems we are dealing with will vanish, and its usage will become easier, and we will also get more feedback.

I would love to do that but unfortunately it is not possible at the moment to ship experimental/beta APIs in Core. That concept doesn't exist.

@manzoorwanijk
Copy link
Contributor

We had a style conflict issue in Jetpack for Dataviews. We solved it in this PR

@youknowriad
Copy link
Contributor Author

@manzoorwanijk I'm curious how are you "bundling" DataViews today in Jetpack?

@Tropicalista
Copy link

@manzoorwanijk Would anyone be able to test the package build from the current PR and see if it allows you to move forward.

Can you provide any basic instructions on how to test this?

@youknowriad
Copy link
Contributor Author

Can you provide any basic instructions on how to test this?

One is to follow the testing instructions in the PR description (using npm link). The other way is to build the package, copy the folder packages/dataviews and put it in your own node_modules as a replacement of the existing dataviews dependency.

@manzoorwanijk
Copy link
Contributor

manzoorwanijk commented Nov 26, 2024

I gave this PR a test using pnpm link inside Jetpack and it worked well and fixed the error related to private APIs mismatch due to version difference of dataviews.

The only thing that doesn't seem to work well with the sub-path import is that TS is not able to find the types for it and we may need to fix that using exports in package.json.

@youknowriad
Copy link
Contributor Author

I think it's clear that this PR is not a perfect solution (i18n and some style conflicts) but it seems the best that we have at the moment.

So I propose that we fix the TS issues, try to simplify the build if possible and move forward with this approach.

WDYT?

@manzoorwanijk
Copy link
Contributor

So I propose that we fix the TS issues, try to simplify the build if possible and move forward with this approach.

I think that sounds like a good approach. Should we also add some experimental flag here to ensure that people don't rely on it as being something stable?

like

import something from '@wordpress/dataviews/wp__experimental';

I know that's ugly but if there is a way to communicate it, that will be better and safer.

@youknowriad
Copy link
Contributor Author

@manzoorwanijk My experience with package subpaths exports is small and it's also the first time we use exports in a Gutenberg package so this is going to create a precedent. But I did push a change in the package.json, I would love confirmation that this solves the typescript issues you're seeing.

@youknowriad
Copy link
Contributor Author

It turns out when you have an "exports" field, you need to define all the subpaths that can be consumed in there, so it's kind of impactful. I did it though, we just need to confirm that the types work properly.

I was also able to avoid hardcoding the dependencies in the build script.

So assuming the TS and exports fields are correct, this one should be ready.

@manzoorwanijk
Copy link
Contributor

@manzoorwanijk My experience with package subpaths exports is small and it's also the first time we use exports in a Gutenberg package so this is going to create a precedent. But I did push a change in the package.json, I would love confirmation that this solves the typescript issues you're seeing.

I tested it again and all seems good now. Thank you for fixing it.

@youknowriad
Copy link
Contributor Author

Thank you for testing @manzoorwanijk

Seems we just need an approval here. cc @louwie17 @oandregal @jsnajdr :)

@youknowriad youknowriad added [Type] Build Tooling Issues or PRs related to build tooling [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond labels Nov 27, 2024
@jsnajdr
Copy link
Member

jsnajdr commented Nov 27, 2024

The types look good after fixing the exports field. One additional thing I verified is that all type definitions inside build-types are self-contained, i.e., the *.d.ts files import only from other files in the same directory, or from react. The react package is the only external type dependency.

It would be a big problem if there was any import from @wordpress/components in the types, because the components package doesn't really exist in this context, it's been bundled.

Copy link
Member

@jsnajdr jsnajdr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to ship 🙂 🚢

@youknowriad youknowriad enabled auto-merge (squash) November 27, 2024 10:00
@youknowriad youknowriad merged commit 14adfdb into trunk Nov 27, 2024
64 checks passed
@youknowriad youknowriad deleted the try/wp-specific-build branch November 27, 2024 10:29
@github-actions github-actions bot added this to the Gutenberg 19.9 milestone Nov 27, 2024
@youknowriad
Copy link
Contributor Author

Thanks all. I'm guessing the package release is going to happen by the next Gutenberg release (forgot the dates and process exactly). Let me know how it goes and if there are any issues. Thank you.

@bph
Copy link
Contributor

bph commented Nov 28, 2024

@youknowriad We already have a 19.8 RC 1. It seems it would be helpful to have this PR in the final release next week? If yes, I would label it Backport to Gutenberg RC and change the milestone and I will run a RC2 tomorrow or Monday.

(that would also fix the issue wptrainingteam/devblog-dataviews-plugin#2 (comment) sooner)

@youknowriad youknowriad added the Backport to Gutenberg RC Pull request that needs to be backported to a Gutenberg release candidate (RC) label Nov 28, 2024
@youknowriad
Copy link
Contributor Author

Good call, I added the label.

@bph bph modified the milestones: Gutenberg 19.9, Gutenberg 19.8 Nov 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backport to Gutenberg RC Pull request that needs to be backported to a Gutenberg release candidate (RC) [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond [Type] Build Tooling Issues or PRs related to build tooling
Projects
None yet
Development

Successfully merging this pull request may close these issues.

DataViews: Component crashes on interaction with UI
10 participants