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

Scripts: Convert legacy entry point arguments for compatibility with webpack 5 #34264

Merged
merged 9 commits into from
Sep 9, 2021

Conversation

pablinos
Copy link
Member

@pablinos pablinos commented Aug 24, 2021

Description

Fixes #34236.
Fixes #34239.

After upgrading to v18.0.0, we started getting an error when specifying the entry point file on the command line:

> wp-scripts build src/index.js                                                                                                  
                                                                                                                                                                                                                                                                  
[webpack-cli] Unknown command or entry 'index=./src/index.js'                                                                                                                                                                                                     
[webpack-cli] Run 'webpack --help' to see available commands and options                                                                                                                                                                                          
 ERROR  Command failed with exit code 2.  

Because src/index.js is the default, we could get around this problem by removing the command line argument, but I decided to investigate what was happening.

It seems like the issue is caused by a breaking change from the upgrade to webpack v5. Looking at the documentation, webpack v4 states that custom/multiple entry points can be specified on the command line using [name]=[file] pairs. The webpack v5 documentation doesn't have this option for command line entry points. One of the options it does show is simply the filenames listed as separate arguments.

This change removes the code that converted file arguments on the command line to the webpack v4 entry point format, so the arguments are passed as is to webpack v5.

How has this been tested?

It's been a little tricky to test as I haven't been able to link the development version of the package with it's dependencies into our project in a way that will have the build process complete successfully. But I have been able to test that without this change, I get the above error, and with it, the error doesn't occur.

Types of changes

Bug fix - This allows entry points to be specified on the command line.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@pablinos pablinos self-assigned this Aug 24, 2021
@pablinos pablinos changed the title wp-scripts: Remove code to convert entrypoint argument conversion wp-scripts: Remove code to convert entrypoint arguments Aug 24, 2021
@github-actions
Copy link

github-actions bot commented Aug 24, 2021

Size Change: 0 B

Total Size: 1.04 MB

ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.19 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 119 kB
build/block-editor/style-rtl.css 13.8 kB
build/block-editor/style.css 13.8 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 600 B
build/block-library/blocks/button/style.css 600 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 927 B
build/block-library/blocks/gallery/editor.css 934 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 70 B
build/block-library/blocks/group/theme.css 70 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/html/editor-rtl.css 283 B
build/block-library/blocks/html/editor.css 284 B
build/block-library/blocks/image/editor-rtl.css 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 488 B
build/block-library/blocks/media-text/style.css 485 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 489 B
build/block-library/blocks/navigation-link/editor.css 488 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation/editor-rtl.css 1.72 kB
build/block-library/blocks/navigation/editor.css 1.72 kB
build/block-library/blocks/navigation/style-rtl.css 1.42 kB
build/block-library/blocks/navigation/style.css 1.41 kB
build/block-library/blocks/navigation/view.min.js 2.52 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 310 B
build/block-library/blocks/page-list/editor.css 310 B
build/block-library/blocks/page-list/style-rtl.css 241 B
build/block-library/blocks/page-list/style.css 241 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 261 B
build/block-library/blocks/paragraph/style.css 261 B
build/block-library/blocks/post-author/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 398 B
build/block-library/blocks/post-featured-image/editor.css 398 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 60 B
build/block-library/blocks/post-title/style.css 60 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 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 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B
build/block-library/blocks/query-pagination/editor.css 262 B
build/block-library/blocks/query-pagination/style-rtl.css 239 B
build/block-library/blocks/query-pagination/style.css 236 B
build/block-library/blocks/query-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 220 B
build/block-library/blocks/quote/theme.css 222 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 374 B
build/block-library/blocks/search/style.css 375 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 250 B
build/block-library/blocks/separator/style.css 250 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.3 kB
build/block-library/blocks/social-links/style.css 1.3 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 636 B
build/block-library/blocks/template-part/editor.css 635 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 853 B
build/block-library/common.css 849 B
build/block-library/editor-rtl.css 9.54 kB
build/block-library/editor.css 9.52 kB
build/block-library/index.min.js 151 kB
build/block-library/reset-rtl.css 527 B
build/block-library/reset.css 527 B
build/block-library/style-rtl.css 10.2 kB
build/block-library/style.css 10.2 kB
build/block-library/theme-rtl.css 658 B
build/block-library/theme.css 663 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.9 kB
build/components/index.min.js 209 kB
build/components/style-rtl.css 15.8 kB
build/components/style.css 15.8 kB
build/compose/index.min.js 10.2 kB
build/core-data/index.min.js 12.3 kB
build/customize-widgets/index.min.js 11.1 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 14.9 kB
build/edit-navigation/style-rtl.css 3.38 kB
build/edit-navigation/style.css 3.37 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29 kB
build/edit-post/style-rtl.css 7.2 kB
build/edit-post/style.css 7.2 kB
build/edit-site/index.min.js 26.4 kB
build/edit-site/style-rtl.css 5.07 kB
build/edit-site/style.css 5.07 kB
build/edit-widgets/index.min.js 16.1 kB
build/edit-widgets/style-rtl.css 4.06 kB
build/edit-widgets/style.css 4.06 kB
build/editor/index.min.js 37.7 kB
build/editor/style-rtl.css 3.74 kB
build/editor/style.css 3.73 kB
build/element/index.min.js 3.17 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 5.36 kB
build/format-library/style-rtl.css 668 B
build/format-library/style.css 669 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.49 kB
build/keycodes/index.min.js 1.25 kB
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.88 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.28 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.32 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.27 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@Soean Soean added [Package] Scripts /packages/scripts [Type] Bug An existing feature does not function as intended labels Aug 24, 2021
@Soean
Copy link
Member

Soean commented Aug 24, 2021

Fixes #34236

@gziolo
Copy link
Member

gziolo commented Aug 24, 2021

@pablinos, good investigation. I arrived at the same conclusion, see my comment #34236 (comment).

@pablinos
Copy link
Member Author

I arrived at the same conclusion, see my comment #34236 (comment).

Ah great! I missed that issue. Does that mean this is already fixed or handled in another PR?

@gziolo
Copy link
Member

gziolo commented Aug 24, 2021

You are first, I plan to look at this PR tomorrow and test it inside Gutenberg. The way I do it looks as follows:

npx wp-create-block example --no-wp-scripts
cd example
../node_modules/.bin/wp-scripts build src/index.js

This way you are able to test the latest version of @wordpress/scripts.

@gziolo
Copy link
Member

gziolo commented Aug 25, 2021

I did some tests and it looks like preserving weback v4 experience is going to be difficult.

When I try to build my test block and run:

../node_modules/.bin/wp-scripts build src/index.js

I see the following error:

Screen Shot 2021-08-25 at 10 16 11

It might be similar to what we had in webpack 4 but it was handled by the custom code that gets removed in this PR.

Then I tried:

../node_modules/.bin/wp-scripts build ./src/index.js

It works fine but the output is different:

Screen Shot 2021-08-25 at 10 13 39

It looks like the default entry point is main and I don't quite know how to change it.

The other issue I found is when you provide multiple entry points they all get bundled into one file main.js:

../node_modules/.bin/wp-scripts build ./src/index.js ./src/view.js

Output:

Screen Shot 2021-08-25 at 10 20 56

@gziolo
Copy link
Member

gziolo commented Aug 25, 2021

The good news is that I followed the comment #34239 (comment) from @walbo and I executed the following:

../node_modules/.bin/wp-scripts build --entry ./src/index.js --output-path=custom --output-filename=index.js

And it works like a charm for JavaScript:

Screen Shot 2021-08-25 at 10 44 31

It doesn't quite work with CSS 😅

@pablinos
Copy link
Member Author

Yes, this certainly looks a bit more complex than just removing the code.

Thanks for the testing tips, I'll give it a go and see if I can get parity with the webpack v4 version.

@pablinos
Copy link
Member Author

I did some research into how we might be able to fix this, and I'm not sure if this particularly elegant, but it's working for me.

The principle is that we take the old syntax for specifying entry points on the command line and pass them to webpack as an environment variable. These environment variables can be passed as objects, so if the environment variable exists, then it gets used as the entry in the config, and if not then we default to using index as before.

This also seems to fix #34239 for me as I can specify an entry point and a custom output path.

@gziolo and @Soean - would you be able to give this a test and see if it's working for you?

@gziolo
Copy link
Member

gziolo commented Aug 30, 2021

@pablinos, that's a great idea to tackle it this way. We probably can simplify it and use a hardcoded node ENV inside the script as we do with other options:

process.env.NODE_ENV = process.env.NODE_ENV || 'production';

process.env.WP_NO_EXTERNALS = true;

process.env.WP_BUNDLE_ANALYZER = true;

@pablinos
Copy link
Member Author

Thanks @gziolo, I was thinking it could be simplified, but wasn't sure how.

I don't think I fully understand your suggestion though! The complexity for me comes from the parsing and reformatting of the options. Would this help with that or is it solving another issue?

Would we also want to use the same arguments with other scripts, like start?

@pablinos pablinos changed the title wp-scripts: Remove code to convert entrypoint arguments wp-scripts: Convert entrypoint arguments for compatibility with webpack 5 Aug 31, 2021
@gziolo
Copy link
Member

gziolo commented Sep 1, 2021

I don't think I fully understand your suggestion though! The complexity for me comes from the parsing and reformatting of the options. Would this help with that or is it solving another issue?

I can have a look tomorrow. If I don't come up with a better approach, we can proceed with your proposal. My biggest concern is that --env could be passed from CLI, too.

Would we also want to use the same arguments with other scripts, like start?

This PR changes getWebpackArgs so it would apply to both start and build automatically.

@pablinos
Copy link
Member Author

pablinos commented Sep 4, 2021

Thanks taking a look at this @gziolo

My biggest concern is that --env could be passed from CLI, too.

I'll test that some more, but that should work. The problem would be trying to override this entries value from the CLI, but as we only create that when the file arguments are present, I'm not sure that's a problem.

This PR changes getWebpackArgs so it would apply to both start and build automatically.

Yes, that's what I thought. I saw that the code you linked to was part of the build script, so wondered about making the changes for start too.

If you think it would be better to use process.env then I can look at swapping to that.

@gziolo
Copy link
Member

gziolo commented Sep 8, 2021

@pablinos, I added a commit to better explain the idea I had: 83b1807

I think it doesn't cover the concern you had with --entry CLI arg passed. I'm not sure yet what we should do in such a case.

I tested with the following command and it seems to work great:

wp-scripts build src/index.js x=./src/view.js --output-path=custom

It creates two entry points:

  • src/index.js resolves to custom/index.js
  • x=./src/view.js resolves to custom/x.js

All paths passed are cleaned up from the CLI arguments to avoid some random side effects.

Let me know what you think. I'm happy to mix both approach if you think that --env is easier to follow.

@gziolo gziolo added the Backwards Compatibility Issues or PRs that impact backwards compatability label Sep 8, 2021
@pablinos
Copy link
Member Author

pablinos commented Sep 8, 2021

I think it doesn't cover the concern you had with --entry CLI arg passed.

My concern there was that if someone wanted to use the entries key of env then they can't as we would end up stamping on it - in fact it might just generally break things depending on the value passed. It's the same sort of problem as if someone sets a WP_ENTRY environment variable with your approach.

You're using the more obscurely named WP_ENTRY, so we could change to using wpentries or something and document that you shouldn't use that as an env value in your webpack config.

All paths passed are cleaned up from the CLI arguments to avoid some random side effects.

That's a good addition, we should definitely keep that.

I'm happy to mix both approach if you think that --env is easier to follow.

I personally feel like the --env approach is a bit cleaner as you don't have to convert between JSON and back, but it's not something I feel very strongly about! As you say, we've only been using process.env values until now, so maybe we should stick to that.

@gziolo
Copy link
Member

gziolo commented Sep 8, 2021

I personally feel like the --env approach is a bit cleaner as you don't have to convert between JSON and back, but it's not something I feel very strongly about! As you say, we've only been using process.env values until now, so maybe we should stick to that.

I wasn't aware that --env is even an option before this PR 😄 The hack with process.env isn't the most elegant one, but indeed we use it in many places to simplify handling.

You're using the more obscurely named WP_ENTRY, so we could change to using wpentries or something and document that you shouldn't use that as an env value in your webpack config.

Ah right, a custom env variable could do the trick but again we would have to map it. I guess both approaches have pros and cons 😄

One more thing we need to add is to bail out of the legacy path handling when --entry is passed from CLI.

@gziolo gziolo changed the title wp-scripts: Convert entrypoint arguments for compatibility with webpack 5 Scripts: Convert legacy entrypoint arguments for compatibility with webpack 5 Sep 8, 2021
@gziolo gziolo changed the title Scripts: Convert legacy entrypoint arguments for compatibility with webpack 5 Scripts: Convert legacy entry point arguments for compatibility with webpack 5 Sep 8, 2021
Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

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

@pablinos, I would appreciate your cross-check for the current version. Otherwise, I'm approving too many of my changes 😓

@gziolo gziolo added this to In progress in Core JS Sep 8, 2021
@gziolo gziolo moved this from In progress to Needs review in Core JS Sep 8, 2021
@gziolo gziolo merged commit 96cdb3b into trunk Sep 9, 2021
@gziolo gziolo deleted the fix/webpack-entrypoint-args branch September 9, 2021 07:20
@github-actions github-actions bot added this to the Gutenberg 11.6 milestone Sep 9, 2021
@gziolo gziolo mentioned this pull request Sep 9, 2021
3 tasks
gziolo added a commit that referenced this pull request Sep 9, 2021
…webpack 5 (#34264)

* Remove code to convert entrypoint argument conversion

* Change entrypoint configuration to be passed by environment variables.

* Change the operator to support older versions of node.

* Change the logic to support = syntax for specifying output filenames.

* Refactor the logic to use `process.env.WP_ENTRY`

* Update webpack.config.js

* Apply suggestions from code review

* Update packages/scripts/config/webpack.config.js

* Improve handling when `--entry` arg present

Co-authored-by: Grzegorz Ziolkowski <grzegorz@gziolo.pl>
@gziolo gziolo modified the milestones: Gutenberg 11.6, Gutenberg 11.5 Sep 9, 2021
@gziolo
Copy link
Member

gziolo commented Sep 9, 2021

I cherry-picked this PR to Gutenberg 11.5 release branch.

@gziolo gziolo moved this from Needs review to Done in Core JS Sep 9, 2021
fullofcaffeine added a commit that referenced this pull request Sep 9, 2021
* trunk:
  [RNMobile][Embed block] Add device's locale to preview content (#33858)
  Update AlignmentMatrixControl docs post merge. (#34662)
  Chore: Update caniuse package to the latest version (#34685)
  Chore: Move `react-native-url-polyfill` to dev dependencies (#34687)
  Site Editor - add basic plugin support (#34460)
  ESLint Plugin: Use Jest related rules only when the package is installed (#33120)
  Update `@wordpress/components` package's contributing guidelines (#33960)
  chore(release): publish
  Update changelog files
  [RNMobile] [Embed block] Fix content disappearing on Android when switching light/dark mode (#34207)
  Scripts: Convert legacy entry point arguments for compatibility with webpack 5 (#34264)
  Update justication control in `flex` layout (#34651)
  Block Editor: Rename experimental prop used in `BlockControls` (#34644)
  Fix social links deprecation (#34639)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backwards Compatibility Issues or PRs that impact backwards compatability [Package] Scripts /packages/scripts [Type] Bug An existing feature does not function as intended
Projects
No open projects
Core JS
  
Done
3 participants