Maison >interface Web >js tutoriel >[Compilation et partage] Quelques questions d'entretien webpack (avec analyse des réponses)
1.
webpack est un bundler de modules statiques. Lorsque webpack traite une application, il crée de manière récursive un graphe de dépendances qui contient tous les modules dont l'application a besoin, puis regroupe ces modules dans un ou plusieurs bundles.
Webpack est comme une ligne de production. Il doit passer par une série de processus de traitement (chargeurs) avant que les fichiers sources puissent être convertis en résultats de sortie. Chaque processus de traitement sur cette ligne de production a une responsabilité unique et il existe des dépendances entre plusieurs processus. Ce n'est qu'une fois le traitement en cours terminé qu'il peut être transmis au processus suivant pour traitement.
Un plug-in est comme une fonction insérée dans la ligne de production, qui traite les ressources de la ligne de production à un instant précis. Webpack diffusera les événements pendant le processus en cours. Le plug-in n'a besoin que d'écouter les événements qui l'intéressent et peut rejoindre la ligne de production pour modifier le fonctionnement de la ligne de production.
2. Pouvez-vous parler du processus d'emballage/processus de construction
3.Pouvez-vous parler de l'optimisation des opérations frontales
Le processus en cours d'exécution de webpack est un processus en série, et son flux de travail consiste à connecter divers plug-ins en série.
L'exécution en ligne de commande de la commande d'empaquetage npx webpack
démarrenpx webpack
打包命令开始
1.初始化编译参数
:从配置文件和shell命令中读取与合并参数
2.开始编译
:根据上一步得到的参数初始化Compiler对象,加载所有配置的Plugin,执行对象的 run 方法开始执行编译。
3.确定入口
:根据配置中的 entry 找出所有的入口文件
4.编译模块
:从入口文件触发,调用所有配置的Loader对模块进行翻译,再找出该模块依赖的模块,然后递归本步骤直到所有入口依赖的文件都进行翻译。
5.完成模块编译
:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系图。
6.输出资源
:根据依赖关系图,组装成一个个包含多个模块的Chunk,再把每个Chunk转化成一个单独的文件加入到输出列表,根据配置确定输出的路径和文件名,输出。
在以上过程中,Webpack
会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑。
总结
3.Compiler编译对象掌控者webpack生命周期,不执行具体的任务,只是进行一些调度工作。比如执行模块创建、依赖收集、分块、打包等
2.
调用run之后,创建Compiltation实例,每次构建都会新创建一个Compiltation实例,包含了这次构建的基本信息Webpack
1.Initialiser les paramètres de compilation
: lire et fusionner les paramètres des fichiers de configuration et des commandes shellDémarrer la compilation
: Initialisez l'objet Compiler selon les paramètres obtenus à l'étape précédente, chargez tous les plugins configurés et exécutez la méthode run de l'objet pour démarrer la compilation.
Déterminer l'entrée
: Rechercher tous les fichiers d'entrée en fonction de l'entrée dans la configuration Module de compilation
: Déclenché à partir du fichier d'entrée, appeler tous les Loaders configurés pour exécuter le module Translate, puis recherchez les modules dont dépend le module, puis répétez cette étape jusqu'à ce que tous les fichiers dépendants de l'entrée soient traduits. Compilation complète des modules
: Après avoir utilisé Loader pour traduire tous les modules à l'étape 4, le contenu final traduit de chaque module et le diagramme de dépendances entre eux sont obtenus. Ressources de sortie
: selon le graphe de dépendances, assemblez-les en morceaux contenant plusieurs modules, puis convertissez chaque morceau en un fichier séparé et ajoutez-le à la liste de sortie, et déterminez la sortie en fonction de la configuration. Chemin et nom du fichier, sortie. Dans le processus ci-dessus, Webpack
diffusera des événements spécifiques à des moments précis, et le plug-in exécutera une logique spécifique après avoir écouté les événements qui l'intéressent.
RésuméL'objet de compilation du compilateur contrôle le cycle de vie du webpack. Il n'effectue pas de tâches spécifiques, mais effectue uniquement un travail de planification. Par exemple, effectuez la création de modules, la collecte de dépendances, le chunking, l'empaquetage, etc.
Webpackcode> diffusera des événements spécifiques à des moments précis et le plug-in exécutera une logique spécifique après avoir écouté les événements qui vous intéressent.
Commencez à analyser le fichier pour construire l'arborescence de syntaxe AST à partir de l'entrée spécifiée dans le fichier de configuration (webpack.config.js)
Quel est le rôle du chargeur dans Webpack/Qu'est-ce que le chargeur ? 🎜Loader est un mécanisme fourni dans 🎜webpack pour gérer plusieurs formats de fichiers🎜 Parce que webpack ne connaît que JS et JSON, Loader est équivalent à un traducteur, prétraitant d'autres types de ressources. 🎜 Utilisé pour convertir le "code source" du module. 🎜 Le chargeur prend en charge les appels en chaîne et l'ordre des appels est de droite à gauche. **Chaque chargeur de la chaîne traitera les ressources qui ont été traitées auparavant et deviendra finalement du code js. 🎜 Vous pouvez fournir plus de fonctionnalités à l'écosystème JavaScript grâce aux fonctions de prétraitement du chargeur. 🎜🎜🎜🎜🎜Quels sont les chargeurs courants ? 🎜🎜🎜🎜less-loader : compilez moins de fichiers en fichiers CSS🎜🎜🎜🎜Pendant le développement, nous utilisons souvent moins de préprocesseurs pour écrire des styles CSS afin d'améliorer l'efficacité du développement🎜
Le plugin est plus puissant et son objectif principal est de résoudre des problèmes qui ne peuvent pas être réalisés par le chargeur, comme l'optimisation du packaging et la compression du code.
Une fois le plugin chargé, les fonctions définies par le plugin seront déclenchées à un certain moment lors de la construction du webpack pour aider webpack à faire quelque chose. Implémentez des extensions fonctionnelles pour webpack.
Un plug-in est comme une fonction insérée dans la ligne de production, qui traite les ressources de la ligne de production à un instant précis. Webpack diffusera les événements pendant le processus en cours. Le plug-in n'a besoin que d'écouter les événements qui l'intéressent et peut rejoindre cette ligne de production pour modifier le fonctionnement de la ligne de production.
Ou utilisez le résumé précédent pour parler de ce que sont respectivement Loader et Plugin
1. Loader s'exécute dans la phase de compilationDurée d'exécution
2. Les plugins fonctionnent dans tout le cycle
Utilisation
Plugin : 1. Télécharger 2. Citer 3. Utiliser
mode = production
,生产环境默认开启tree-shaking
À propos des effets secondaires
Code split splitChunks - configuré dans l'élément de configuration d'optimisation
Utilisez Dll pour le sous. -packaging
Utilisez le routage pour un chargement paresseux
Comment configurer le code de compression dans Webpack ? Qu'est-ce qui est compressé ?
Compression js : en utilisant terser-webpack-plugin
Compression css : en utilisant le plug-in optimise-css-assets-webpack-plugin Idée 1 : Réduisez les fichiers ou les codes qui doivent être construits Normalement, node_module sera emballé dans un fichier Idée 2 : Faites plus de construction Il y a des frais généraux dans le démarrage du processus et la communication du processus, et le temps de travail est relativement long, plusieurs processus sont donc nécessaires Emballage 【Recommandations associées : Tutoriel vidéo javascript, Vidéo de programmation】
Supprimer la console, les commentaires , Espaces, sauts de ligne, codes CSS inutilisés, etc.
Comment améliorer la vitesse de création d'un webpack ?
À l'aide de la technologie DLL, les frameworks et les bibliothèques qui ne sont pas fréquemment mis à jour peuvent être emballés séparément pour générer un chunk
Le code source du projet doit également être divisé et peut être basé sur Route pour diviser les fichiers packagés--> Comment implémenter le chargement paresseux des routes ? Comment implémenter le chargement asynchrone des composants dans webpack ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!