JavaScript chat Summary – August 21

Below is a summary of the discussion from this week’s JavaScript chat (agenda, Slack transcript).

Have a topic for discussion for the next meeting? Leave a suggested edit on next week’s agenda.

Use of globals

Gutenberg is eliminating the implicit use of globals. They encountered an issue where the WordPress JS coding standards still allow the wp global. This makes it harder to check where Gutenberg is using it. 

@atimmer mentioned that that code standards should be global agnostic as the globals that a project uses is specific to the project.

Action item: Remove the global definition and move the ESLint configuration into a@wordpress scoped package.

@wordpress/token-list

A new package has been merged (not yet published to npm), @wordpress/token-list: https://github.com/WordPress/gutenberg/tree/master/packages/token-list

This is intended to provide the same usability offered by Element#classList, without requiring a DOM node to work with.

Probably not much to discuss on this one, consider it more an announcement of availability :slightly_smiling_face:

@aduth

Lodash import

In the development of token-list @aduth tried using lodash-es as the Lodash dependency instead of lodash. In the eventual implementation he reverted this, but he asked input on whether people thought this was a good idea. In general people agreed that this would be the way forward.

Action item: Convert lodash imports in @wordpress/packagesto lodash-es imports.

Polyfills for built-ins

@gziolo has created a PR to improve how built-ins are polyfilled. The PR has a good description of the changes, a small summary is:

  • We no longer use corejs: 2 flag when building distribution version for packages.
  • We no longer use builtIns: "usage" in the same process.
  • We use them when Webpack does its magic to produce WP specific bundles.

The biggest change is that every time someone uses npm package, they need to apply polyfills themselves. The reason for this is because the polyfills were causing bloat while not everyone might need them.

One of the remaining questions was if the module build should still include transpilation down to ES5 compatible code, or if it should use features that all browsers support that support <script type="module">. Another question is which polyfills should be included in that build.

The rollup wiki has a good page describing what should be in a module build, but makes no mention of polyfills. @gziolo will research this issue a bit more and come back with his conclusions in a later chat.

Proposal for managing packages

The proposal for managing packages has had some updates since last week. This specifically includes some additions to move the burden of version assignment to the developer proposing the changes.

There was a remaining question about how granular the changelog should be kept. @aduth came up with a simple guideline: “If you struggle to classify a change as Breaking, New Feature, or Bug Fix, then it’s not necessary to include.”

Including vendor scripts in plugins

A question came up in #core-editor about how a plugin might want to consider including Lodash right now. A solution was shared that would register lodash if it wasn’t currently registered. This also goes for other vendor scripts. The chat then discussed how we could deal with updating libraries in WordPress and plugins registering their own versions. We didn’t get to a resolution.