Files
Nikolay Vitkov d76576c6fe [deps] Update EsLint v8.57.1 and plugins
This is need to be able to move to flat config which I am handling
in a separate CL.
The overrides are there as these packages got update today,
so we need to way, but they were last touched 3 years ago,
so reviewing their changes upstream as well.

Bug: none
Change-Id: I61534f881fd4e747c716b42b773f8f7f3e9bc761
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6063618
Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org>
Reviewed-by: Danil Somsikov <dsv@chromium.org>
2024-12-02 14:40:07 +00:00

3.2 KiB

import/dynamic-import-chunkname

💡 This rule is manually fixable by editor suggestions.

This rule reports any dynamic imports without a webpackChunkName specified in a leading block comment in the proper format.

This rule enforces naming of webpack chunks in dynamic imports. When you don't explicitly name chunks, webpack will autogenerate chunk names that are not consistent across builds, which prevents long-term browser caching.

Rule Details

This rule runs against import() by default, but can be configured to also run against an alternative dynamic-import function, e.g. 'dynamicImport.' You can also configure the regex format you'd like to accept for the webpackChunkName - for example, if we don't want the number 6 to show up in our chunk names:

{
 "dynamic-import-chunkname": [2, {
   importFunctions: ["dynamicImport"],
   webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+",
   allowEmpty: false
 }]
}

invalid

The following patterns are invalid:

// no leading comment
import('someModule');

// incorrectly formatted comment
import(
  /*webpackChunkName:"someModule"*/
  'someModule',
);
import(
  /* webpackChunkName : "someModule" */
  'someModule',
);

// chunkname contains a 6 (forbidden by rule config)
import(
  /* webpackChunkName: "someModule6" */
  'someModule',
);

// invalid syntax for webpack comment
import(
  /* totally not webpackChunkName: "someModule" */
  'someModule',
);

// single-line comment, not a block-style comment
import(
  // webpackChunkName: "someModule"
  'someModule',
);

// chunk names are disallowed when eager mode is set
import(
  /* webpackMode: "eager" */
  /* webpackChunkName: "someModule" */
  'someModule',
)

valid

The following patterns are valid:

  import(
    /* webpackChunkName: "someModule" */
    'someModule',
  );
  import(
    /* webpackChunkName: "someOtherModule12345789" */
    'someModule',
  );
  import(
    /* webpackChunkName: "someModule" */
    /* webpackPrefetch: true */
    'someModule',
  );
  import(
    /* webpackChunkName: "someModule", webpackPrefetch: true */
    'someModule',
  );

  // using single quotes instead of double quotes
  import(
    /* webpackChunkName: 'someModule' */
    'someModule',
  );

allowEmpty: true

If you want to allow dynamic imports without a webpackChunkName, you can set allowEmpty: true in the rule config. This will allow dynamic imports without a leading comment, or with a leading comment that does not contain a webpackChunkName.

Given { "allowEmpty": true }:

valid

The following patterns are valid:

import('someModule');

import(
  /* webpackChunkName: "someModule" */
  'someModule',
);

invalid

The following patterns are invalid:

// incorrectly formatted comment
import(
  /*webpackChunkName:"someModule"*/
  'someModule',
);

When Not To Use It

If you don't care that webpack will autogenerate chunk names and may blow up browser caches and bundle size reports.