diff --git a/core/.eslintignore b/core/.eslintignore
index 17bb15e4d21a95703ca8245dc8b57db60a4b6711..440f05bf8421c1b29441e5da3d46568c42608cff 100644
--- a/core/.eslintignore
+++ b/core/.eslintignore
@@ -2,7 +2,7 @@ assets/vendor/**/*
 node_modules/**/*
 **/js_test_files/**/*
 **/build/**/*
-modules/locale/tests/locale_test.js
+modules/locale/tests/js/locale_test.js
 misc/jquery.form.js
 
 # Ignore deliberately malformed YAML files.
diff --git a/core/modules/comment/comment.libraries.yml b/core/modules/comment/comment.libraries.yml
index d1106ca8fc053bc39a56b18a9e7dce9be43d3f4d..f4c26d89c3b540873ef29914aace18a96a2a5b02 100644
--- a/core/modules/comment/comment.libraries.yml
+++ b/core/modules/comment/comment.libraries.yml
@@ -1,11 +1,18 @@
 drupal.comment:
   version: VERSION
   js:
-    comment-entity-form.js: {}
+    js/comment-entity-form.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/drupal.form
+  moved_files:
+    comment/drupal.comment:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        comment-entity-form.js: 'js/comment-entity-form.js'
 
 drupal.comment-by-viewer:
   version: VERSION
diff --git a/core/modules/comment/comment-entity-form.js b/core/modules/comment/js/comment-entity-form.js
similarity index 100%
rename from core/modules/comment/comment-entity-form.js
rename to core/modules/comment/js/comment-entity-form.js
diff --git a/core/modules/content_translation/content_translation.libraries.yml b/core/modules/content_translation/content_translation.libraries.yml
index 3857be167e7e8490e41d5a23dbe1adc80a24566b..8098c34633bb22cb8f3c90b2ddbf3f1643bae7c2 100644
--- a/core/modules/content_translation/content_translation.libraries.yml
+++ b/core/modules/content_translation/content_translation.libraries.yml
@@ -1,7 +1,7 @@
 drupal.content_translation.admin:
   version: VERSION
   js:
-    content_translation.admin.js: {}
+    js/content_translation.admin.js: {}
   css:
     theme:
       css/content_translation.admin.css: {}
@@ -9,3 +9,10 @@ drupal.content_translation.admin:
     - core/jquery
     - core/drupal
     - core/once
+  moved_files:
+    content_translation/content_translation.admin.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        content_translation_admin.js: 'js/content_translation.admin.js'
diff --git a/core/modules/content_translation/content_translation.admin.js b/core/modules/content_translation/js/content_translation.admin.js
similarity index 100%
rename from core/modules/content_translation/content_translation.admin.js
rename to core/modules/content_translation/js/content_translation.admin.js
diff --git a/core/modules/file/file.libraries.yml b/core/modules/file/file.libraries.yml
index 50904d18f5b0b839f38c7a77a3edb40d0a911b6b..baf4ee76f6bc8ec5294081f089753db787eb1f61 100644
--- a/core/modules/file/file.libraries.yml
+++ b/core/modules/file/file.libraries.yml
@@ -1,12 +1,19 @@
 drupal.file:
   version: VERSION
   js:
-    file.js: {}
+    js/file.js: {}
   dependencies:
     - core/jquery
     - core/once
     - core/drupal
     - core/drupalSettings
+  moved_files:
+    file/file.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        file.js: 'js/file.js'
 
 drupal.file-icon:
   version: VERSION
diff --git a/core/modules/file/file.js b/core/modules/file/js/file.js
similarity index 100%
rename from core/modules/file/file.js
rename to core/modules/file/js/file.js
diff --git a/core/modules/filter/filter.libraries.yml b/core/modules/filter/filter.libraries.yml
index ee2ef383d9ddff876bcf6a3239da64c701ef3307..ff081d6a25174382a7c5d19734eddf504b186f5e 100644
--- a/core/modules/filter/filter.libraries.yml
+++ b/core/modules/filter/filter.libraries.yml
@@ -1,21 +1,35 @@
 drupal.filter.admin:
   version: VERSION
   js:
-    filter.admin.js: {}
+    js/filter.admin.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/once
     - core/drupal.form
+  moved_files:
+    filter/filter.admin.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        filter.admin.js: 'js/filter.admin.js'
 
 drupal.filter:
   version: VERSION
   js:
-    filter.js: {}
+    js/filter.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/once
+  moved_files:
+    filter/filter.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        filter.js: 'js/filter.js'
 
 caption:
   version: VERSION
diff --git a/core/modules/filter/filter.admin.js b/core/modules/filter/js/filter.admin.js
similarity index 100%
rename from core/modules/filter/filter.admin.js
rename to core/modules/filter/js/filter.admin.js
diff --git a/core/modules/filter/filter.js b/core/modules/filter/js/filter.js
similarity index 100%
rename from core/modules/filter/filter.js
rename to core/modules/filter/js/filter.js
diff --git a/core/modules/language/language.admin.js b/core/modules/language/js/language.admin.js
similarity index 100%
rename from core/modules/language/language.admin.js
rename to core/modules/language/js/language.admin.js
diff --git a/core/modules/language/language.libraries.yml b/core/modules/language/language.libraries.yml
index 0e7ff2c3d0d6e6f980899b1916035f0df6970e73..d39130e10936cc6477fbb78f8d30db73269a3d02 100644
--- a/core/modules/language/language.libraries.yml
+++ b/core/modules/language/language.libraries.yml
@@ -1,7 +1,7 @@
 drupal.language.admin:
   version: VERSION
   js:
-    language.admin.js: {}
+    js/language.admin.js: {}
   css:
     theme:
       css/language.admin.css: {}
@@ -9,3 +9,15 @@ drupal.language.admin:
     - core/jquery
     - core/drupal
     - core/once
+
+moved_to:
+  version: VERSION
+  js:
+    js/language.admin.js: {}
+  moved_files:
+    language/language.admin.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        language.admin.js: 'js/language.admin.js'
diff --git a/core/modules/locale/locale.admin.js b/core/modules/locale/js/locale.admin.js
similarity index 100%
rename from core/modules/locale/locale.admin.js
rename to core/modules/locale/js/locale.admin.js
diff --git a/core/modules/locale/locale.bulk.js b/core/modules/locale/js/locale.bulk.js
similarity index 100%
rename from core/modules/locale/locale.bulk.js
rename to core/modules/locale/js/locale.bulk.js
diff --git a/core/modules/locale/locale.libraries.yml b/core/modules/locale/locale.libraries.yml
index fb06e81ff6c72a1e8f6ba5e51e4395c743d10510..59065c35904cb9604330ddf7ee4e6862861f3a9f 100644
--- a/core/modules/locale/locale.libraries.yml
+++ b/core/modules/locale/locale.libraries.yml
@@ -1,7 +1,7 @@
 drupal.locale.admin:
   version: VERSION
   js:
-    locale.admin.js: {}
+    js/locale.admin.js: {}
   css:
     component:
       css/locale.admin.css: {}
@@ -10,6 +10,13 @@ drupal.locale.admin:
     - core/drupal
     - core/drupal.form
     - core/once
+  moved_files:
+    locale/locale.admin.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        locale.admin.js: 'js/locale.admin.js'
 
 translations:
   # No sensible version can be specified, since the translations may change at
diff --git a/core/modules/locale/tests/locale_test.js b/core/modules/locale/tests/js/locale_test.js
similarity index 100%
rename from core/modules/locale/tests/locale_test.js
rename to core/modules/locale/tests/js/locale_test.js
diff --git a/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php b/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
index 9e73db43f8373218caa118d1a1189a0cf68a82a8..c45087d40bb2d3523afe5f0bb8a6c2c93f9806a7 100644
--- a/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
@@ -35,7 +35,7 @@ public function testFileParsing(): void {
     // respect to optional whitespace, line breaks, etc.
     // - We test locale_test.js, because that is the one that contains a
     //   variety of whitespace styles.
-    $files[] = __DIR__ . '/../../locale_test.js';
+    $files[] = __DIR__ . '/../../js/locale_test.js';
 
     foreach ($files as $filename) {
       // Parse the file to look for source strings.
@@ -149,7 +149,7 @@ public function testLocaleTranslationJsDependencies(): void {
       ->getStrings([
         'source' => 'Show description',
         'type' => 'javascript',
-        'name' => 'core/modules/locale/locale.admin.js',
+        'name' => 'core/modules/locale/js/locale.admin.js',
       ]);
     $string = $strings[0];
 
diff --git a/core/modules/menu_ui/menu_ui.admin.js b/core/modules/menu_ui/js/menu_ui.admin.js
similarity index 100%
rename from core/modules/menu_ui/menu_ui.admin.js
rename to core/modules/menu_ui/js/menu_ui.admin.js
diff --git a/core/modules/menu_ui/menu_ui.js b/core/modules/menu_ui/js/menu_ui.js
similarity index 100%
rename from core/modules/menu_ui/menu_ui.js
rename to core/modules/menu_ui/js/menu_ui.js
diff --git a/core/modules/menu_ui/menu_ui.libraries.yml b/core/modules/menu_ui/menu_ui.libraries.yml
index c5f95948f9f6db5d3b9cc5fd3ccdfa2a38c5f73e..79df91b4f7c2b52940e0842ec56cfe0087319824 100644
--- a/core/modules/menu_ui/menu_ui.libraries.yml
+++ b/core/modules/menu_ui/menu_ui.libraries.yml
@@ -1,19 +1,33 @@
 drupal.menu_ui:
   version: VERSION
   js:
-    menu_ui.js: {}
+    js/menu_ui.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/drupal.form
+  moved_files:
+    menu_uit/menu_ui.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        menu_ui.js: 'js/menu_ui.js'
 
 drupal.menu_ui.admin:
   version: VERSION
   js:
-    menu_ui.admin.js: {}
+    js/menu_ui.admin.js: {}
   dependencies:
     - core/jquery
     - core/drupal
+  moved_files:
+    menu_uit/menu_ui.admin.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        menu_ui.admin.js: 'js/menu_ui.admin.js'
 
 drupal.menu_ui.adminforms:
   version: VERSION
diff --git a/core/modules/node/content_types.js b/core/modules/node/js/content_types.js
similarity index 100%
rename from core/modules/node/content_types.js
rename to core/modules/node/js/content_types.js
diff --git a/core/modules/node/node.js b/core/modules/node/js/node.js
similarity index 100%
rename from core/modules/node/node.js
rename to core/modules/node/js/node.js
diff --git a/core/modules/node/node.preview.js b/core/modules/node/js/node.preview.js
similarity index 100%
rename from core/modules/node/node.preview.js
rename to core/modules/node/js/node.preview.js
diff --git a/core/modules/node/node.libraries.yml b/core/modules/node/node.libraries.yml
index 9af36335b41435f6a76c57b07ce9a515b357f1c9..053d49df51c78040f5caf3e87937f3db3d1af72e 100644
--- a/core/modules/node/node.libraries.yml
+++ b/core/modules/node/node.libraries.yml
@@ -4,10 +4,17 @@ drupal.node:
     layout:
       css/node.module.css: {}
   js:
-    node.js: {}
+    js/node.js: {}
   dependencies:
     - core/drupal.entity-form
     - core/drupalSettings
+  moved_files:
+    node/node.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        node.js: 'js/node.js'
 
 drupal.node.preview:
   version: VERSION
@@ -15,22 +22,36 @@ drupal.node.preview:
     theme:
       css/node.preview.css: {}
   js:
-    node.preview.js: {}
+    js/node.preview.js: {}
   dependencies:
     - core/jquery
     - core/once
     - core/drupal
     - core/drupal.dialog
     - core/drupal.form
+  moved_files:
+    node/node.preview.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        node.preview.js: 'js/node.preview.js'
 
 drupal.content_types:
   version: VERSION
   js:
-    content_types.js: {}
+    js/content_types.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/drupal.form
+  moved_files:
+    node/content_types.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        content_types.js: 'js/content_types.js'
 
 form:
   version: VERSION
diff --git a/core/modules/path/path.js b/core/modules/path/js/path.js
similarity index 100%
rename from core/modules/path/path.js
rename to core/modules/path/js/path.js
diff --git a/core/modules/path/path.libraries.yml b/core/modules/path/path.libraries.yml
index 2ce29a51722713154cd700f092d0b300affe2cce..97e8b134dbb5ebad4dcd660d594c521722a5916e 100644
--- a/core/modules/path/path.libraries.yml
+++ b/core/modules/path/path.libraries.yml
@@ -1,8 +1,15 @@
 drupal.path:
   version: VERSION
   js:
-    path.js: {}
+    js/path.js: {}
   dependencies:
     - core/jquery
     - core/drupal
     - core/drupal.form
+  moved_files:
+    path/path.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        path.js: 'js/path.js'
diff --git a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js b/core/modules/system/tests/modules/twig_theme_test/js/twig_theme_test.js
similarity index 100%
rename from core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js
rename to core/modules/system/tests/modules/twig_theme_test/js/twig_theme_test.js
diff --git a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.file_url.html.twig b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.file_url.html.twig
index aa5bb6f5ef1dfdc60d3e98009b457eb7210d1ce4..2eb6a15593024455306e4c87931c9b4d98042f34 100644
--- a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.file_url.html.twig
+++ b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.file_url.html.twig
@@ -1,2 +1,2 @@
-<div>file_url: {{ file_url('core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js') }}</div>
+<div>file_url: {{ file_url('core/modules/system/tests/modules/twig_theme_test/js/twig_theme_test.js') }}</div>
 <div>file_url: {{ file_url(undefined_variable) }}</div>
diff --git a/core/modules/system/tests/src/Functional/Theme/EngineTwigTest.php b/core/modules/system/tests/src/Functional/Theme/EngineTwigTest.php
index 980b9996ab57454bf361905439599bec582cd008..5762a135ad6671a05c966d14eb14a0dd8f28a95a 100644
--- a/core/modules/system/tests/src/Functional/Theme/EngineTwigTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/EngineTwigTest.php
@@ -138,7 +138,7 @@ public function testTwigFileUrls(): void {
     $this->drupalGet('/twig-theme-test/file-url');
     /** @var \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator */
     $file_url_generator = \Drupal::service('file_url_generator');
-    $filepath = $file_url_generator->generateString('core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js');
+    $filepath = $file_url_generator->generateString('core/modules/system/tests/modules/twig_theme_test/js/twig_theme_test.js');
     $this->assertSession()->responseContains('<div>file_url: ' . $filepath . '</div>');
   }
 
diff --git a/core/modules/taxonomy/taxonomy.js b/core/modules/taxonomy/js/taxonomy.js
similarity index 100%
rename from core/modules/taxonomy/taxonomy.js
rename to core/modules/taxonomy/js/taxonomy.js
diff --git a/core/modules/taxonomy/taxonomy.libraries.yml b/core/modules/taxonomy/taxonomy.libraries.yml
index 3a7904f202b21aee5f0c5ac3bbf6c4499fd18a88..1da5c7ff6459f505770caf2391387d76eac5698d 100644
--- a/core/modules/taxonomy/taxonomy.libraries.yml
+++ b/core/modules/taxonomy/taxonomy.libraries.yml
@@ -1,7 +1,7 @@
 drupal.taxonomy:
   version: VERSION
   js:
-    taxonomy.js: {}
+    js/taxonomy.js: {}
   css:
     component:
       css/taxonomy.theme.css: {}
@@ -10,3 +10,10 @@ drupal.taxonomy:
     - core/drupal
     - core/drupalSettings
     - core/drupal.tabledrag
+  moved_files:
+    taxonomy/taxonomy.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        taxonomy.js: js/taxonomy.js'
diff --git a/core/modules/text/text.js b/core/modules/text/js/text.js
similarity index 100%
rename from core/modules/text/text.js
rename to core/modules/text/js/text.js
diff --git a/core/modules/text/text.libraries.yml b/core/modules/text/text.libraries.yml
index 91df5cac843e38f919b47530bb41b7b21deb1cde..f2f5aa1a4e63f0a4b9cf559e7a5a8cfaa7b6f883 100644
--- a/core/modules/text/text.libraries.yml
+++ b/core/modules/text/text.libraries.yml
@@ -1,11 +1,18 @@
 drupal.text:
   version: VERSION
   js:
-    text.js: {}
+    js/text.js: {}
   dependencies:
     - core/jquery
     - core/once
     - core/drupal
+  moved_files:
+    text/text.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        text.js: 'js/text.js'
 
 drupal.text-icon:
   version: VERSION
diff --git a/core/modules/user/user.js b/core/modules/user/js/user.js
similarity index 100%
rename from core/modules/user/user.js
rename to core/modules/user/js/user.js
diff --git a/core/modules/user/user.permissions.js b/core/modules/user/js/user.permissions.js
similarity index 100%
rename from core/modules/user/user.permissions.js
rename to core/modules/user/js/user.permissions.js
diff --git a/core/modules/user/user.theme.js b/core/modules/user/js/user.theme.js
similarity index 100%
rename from core/modules/user/user.theme.js
rename to core/modules/user/js/user.theme.js
diff --git a/core/modules/user/user.libraries.yml b/core/modules/user/user.libraries.yml
index 5b24ea8fceff00b03cbaa525cbbbab314495a2ca..617a384a7f79ae7ec27018594e493dfa3219b24c 100644
--- a/core/modules/user/user.libraries.yml
+++ b/core/modules/user/user.libraries.yml
@@ -1,8 +1,8 @@
 drupal.user:
   version: VERSION
   js:
-    user.js: {}
-    user.theme.js: {}
+    js/user.js: {}
+    js/user.theme.js: {}
   css:
     component:
       css/user.module.css: {}
@@ -10,6 +10,19 @@ drupal.user:
     - core/jquery
     - core/drupal
     - core/once
+  moved_files:
+    user/user.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        user.js: 'js/user.js'
+    user/user.theme.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        user.theme.js: 'js/user.theme.js'
 
 drupal.user.admin:
   version: VERSION
@@ -20,7 +33,7 @@ drupal.user.admin:
 drupal.user.permissions:
   version: VERSION
   js:
-    user.permissions.js: {}
+    js/user.permissions.js: {}
   dependencies:
     - core/jquery
     - core/once
@@ -30,6 +43,13 @@ drupal.user.permissions:
     - core/drupal.checkbox
     - core/drupal.debounce
     - core/drupal.announce
+  moved_files:
+    user/user.permissions.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        user.permissions.js: 'js/user.permissions.js'
 
 drupal.user.icons:
   version: VERSION
diff --git a/core/modules/views/tests/modules/views_test_data/views_cache.test.js b/core/modules/views/tests/modules/views_test_data/js/views_cache.test.js
similarity index 100%
rename from core/modules/views/tests/modules/views_test_data/views_cache.test.js
rename to core/modules/views/tests/modules/views_test_data/js/views_cache.test.js
diff --git a/core/modules/views/tests/modules/views_test_data/views_test_data.libraries.yml b/core/modules/views/tests/modules/views_test_data/views_test_data.libraries.yml
index 4b4d8a21c6401f410ed5fa0400de8eb3cced8195..aa9c34d38862a851f30461d1f191b056d9b90553 100644
--- a/core/modules/views/tests/modules/views_test_data/views_test_data.libraries.yml
+++ b/core/modules/views/tests/modules/views_test_data/views_test_data.libraries.yml
@@ -3,4 +3,11 @@ test:
     component:
       views_cache.test.css: {}
   js:
-    views_cache.test.js: {}
+    js/views_cache.test.js: {}
+  moved_files:
+    views_test_data/views_cache.test.js:
+      deprecation_version: drupal:11.1.0
+      removed_version: drupal:12.0.0
+      deprecation_link: https://www.drupal.org/node/3471539
+      js:
+        views_cache.test.js: 'js/views_cache.test.js'