WordPress/gutenberg

Testing: Add lint for Babel runtime dependency in transpiled packages

Open

#14373 opened on Mar 11, 2019

View on GitHub
 (1 comment) (4 reactions) (0 assignees)JavaScript (9,607 stars) (3,893 forks)batch import
Good First IssueNeeds Dev[Type] Automated Testing[Type] Task

Description

Each package transpiled using Babel is configured to apply the Babel runtime transform (source). Thus, the built output for any package is expected to contain references to the @babel/runtime module. For this reason, the package must explicitly define @babel/runtime as a dependency.

For any package which is transpiled using Babel, we should lint to ensure it also includes an explicit dependency on @babel/runtime.

Implementation:

  • A package can be determined as being subject to transpilation if its package.json includes a main reference to a build/ relative path.
    • Technically speaking, any package will be transpiled with Babel if it includes a src/ directory (source), but the main reference is a better indication that it's actually used (related)
  • I expect the best option for linting would be a rule from npm-package-json-lint requiring a specific dependency to be present, and for each exception package (the minority of cases), a package-specific .npmpackagejsonlintrc.json configuration override should disable the lint rule.
    • The lint rule should be applied only in the Gutenberg-specific configuration, not in @wordpress/npm-package-json-lint-config
    • As best I can tell, however, there is no rule present which covers this case. require-dependencies only requires that the dependencies block be present, and no-restricted-dependencies is the inverse of what we need. We may need to consider contributing an upstream enhancement.

cc @greatislander in case it's of interest to you, as you'd done similarly in the past for #13947 with an upstream enhancement at https://github.com/tclindner/npm-package-json-lint/pull/106 .

Contributor guide