Analyse d'un exemple de fichier d'entrée de code source Vue
Cet article présente principalement l'analyse des fichiers d'entrée du code source de Vue (recommandé). L'éditeur pense que c'est plutôt bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur et jetons un œil. J'espère que cela pourra aider tout le monde.
Je développe des projets Vue depuis un certain temps. J'utilisais Angularjs avant, puis Reactjs. Mais à cette époque, je n'avais jamais eu le temps d'enregistrer mes réflexions sur la lecture du code source. Je ne veux pas gâcher cette réflexion durement gagnée, je veux persister ! !
Personnellement, je me sens très heureux lorsque je lis le code source. Chaque fois que je lis le paragraphe précédent, je me sens beaucoup plus épanoui. Je me demande si vous êtes comme moi.
Le code source de Vue est une combinaison de nombreux modules utilisant l'outil de cumul, visible à partir de package.json. Maintenant, téléchargeons le projet vue depuis github et commençons notre « réflexion » aujourd'hui.
La version du code source que j'ai téléchargée est : "version": "2.5.7",
La position de départ du code source peut être vue d'ici
"dev": "rollup -w -c build/config.js --environment TARGET:web-full-dev" // 从build/config.js 中找到 TARGET: web-full-dev 这是运行和编译(支持现在的浏览器,由于里面大量应用了ES6-7)后的 // Runtime+compiler development build (Browser) 'web-full-dev': { entry: resolve('web/entry-runtime-with-compiler.js'), dest: resolve('dist/vue.js'), format: 'umd', env: 'development', alias: { he: './entity-decoder' }, banner },
Nous avons trouvé le fichier de démarrage qui est "web/entry-runtime-with-compiler.js", puis nous avons recherché l'objet Vue et l'avons finalement trouvé dans "instance/ index.js":
// 这是Vue 的开始位置 function Vue (options) { // 判断如果是不是生产环境,且不是通过new关键字来创建对象的话,就在控制台打印一个warning if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue) ) { warn('Vue is a constructor and should be called with the `new` keyword') } this._init(options) }
On dirait que tout est fini ici, car notre objectif est de trouver la position de départ, mais j'ai une question, pourquoi Vue avez-vous besoin d'autant de couches ?
entry-runtime-with-compiler.js -> runtime/index.js -> core/index.js -> instance/index.js
Quand j'ai regardé attentivement le code source, j'ai soudain réalisé, jetons d'abord un coup d'œil à ce que font ces fichiers :
(1) instance/index.js
Certains indices peuvent être vus à partir du nom du module Vue, instance (instance).
Ce fichier est le début de l'objet Vue, et c'est aussi le fichier centralisé des méthodes de la chaîne de prototypes (prototype) Vue
// _init initMixin(Vue) // $set、$delete、$watch stateMixin(Vue) // $on、$once、$off、$emit eventsMixin(Vue) // _update、$forceUpdate、$destroy lifecycleMixin(Vue) // $nextTick、_render、以及多个内部调用的方法 renderMixin(Vue)
Ces méthodes peuvent uniquement être instanciées et appelées.
(2) core/index.js
Ce fichier est à nouveau traité après la création et le traitement préliminaire d'Instance/index.js. Alors, que faisait-il principalement ? Nous ne considérons pas l'environnement d'exécution
initGlobalAPI(Vue)
Oui, nous appelons simplement cette méthode, c'est très simple et clair --- "Initialiser l'interface globale",
Entrons dans la méthode initGlobalAPI
export function initGlobalAPI (Vue: GlobalAPI) { // config const configDef = {} configDef.get = () => config // 在 非生产环境,如何修改了配置文件config里面的内容会提示警告 if (process.env.NODE_ENV !== 'production') { configDef.set = () => { warn( 'Do not replace the Vue.config object, set inpidual fields instead.' ) } } // 定义config 属性, 监听变化 Object.defineProperty(Vue, 'config', configDef) // exposed util methods. // NOTE: these are not considered part of the public API - avoid relying on // them unless you are aware of the risk. Vue.util = { warn, extend, mergeOptions, defineReactive } Vue.set = set Vue.delete = del Vue.nextTick = nextTick Vue.options = Object.create(null) // 给vue 创建 ASSET_TYPES 的 空对象 ASSET_TYPES.forEach(type => { Vue.options[type + 's'] = Object.create(null) }) // this is used to identify the "base" constructor to extend all plain-object // components with in Weex's multi-instance scenarios. Vue.options._base = Vue extend(Vue.options.components, builtInComponents) // Vue.use initUse(Vue) // Vue.mixin initMixin(Vue) // Vue.extend initExtend(Vue) // Vue.component, Vue.directive, Vue.filter initAssetRegisters(Vue) }
qui sont essentiellement des méthodes statiques, c'est-à-dire : appelées sous la forme de Vue xxx.
(3) runtime/index.js
Voici quelques extensions et __patch__ et $mount (éléments de montage) ajoutés à Vue.prototype .
// Vue.options.directives(model和show)和 Vue.options.components(Transition和TransitionGroup) extend(Vue.options.directives, platformDirectives) extend(Vue.options.components, platformComponents) // install platform patch function Vue.prototype.__patch__ = inBrowser ? patch : noop // public mount method Vue.prototype.$mount = function ( el?: string | Element, hydrating?: boolean ): Component { el = el && inBrowser ? query(el) : undefined return mountComponent(this, el, hydrating) }
(4) Entry-runtime-with-compiler.js
Faites juste une chose la chose est de réécrire $mount. Vue réécrit différents $mount
const mount = Vue.prototype.$mount Vue.prototype.$mount = function ( el?: string | Element, hydrating?: boolean ): Component { ... return mount.call(this, el, hydrating) }
selon différents environnements d'exploitation. À ce stade, nous avons trouvé le fichier à commencer à exécuter, quelle est l'utilité de chaque fichier, comment le faire spécifiquement et ce qui a été fait, j'en parlerai la prochaine fois. Mais nous ne devrions pas trop nous soucier de chaque détail au début, et ne pas avoir à comprendre chaque ligne de code. Si tel est le cas, ce sera vraiment fatigant et nous n’aurons peut-être pas le courage de persister.
Recommandations associées :
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Ouvrez WeChat, sélectionnez Paramètres dans Moi, sélectionnez Général, puis sélectionnez Espace de stockage, sélectionnez Gestion dans Espace de stockage, sélectionnez la conversation dans laquelle vous souhaitez restaurer les fichiers et sélectionnez l'icône de point d'exclamation. Didacticiel Modèle applicable : iPhone13 Système : iOS15.3 Version : WeChat 8.0.24 Analyse 1 Ouvrez d'abord WeChat et cliquez sur l'option Paramètres sur la page Ma. 2 Ensuite, recherchez et cliquez sur Options générales sur la page des paramètres. 3Cliquez ensuite sur Espace de stockage sur la page générale. 4 Ensuite, cliquez sur Gérer sur la page de l'espace de stockage. 5Enfin, sélectionnez la conversation dans laquelle vous souhaitez récupérer des fichiers et cliquez sur l'icône de point d'exclamation à droite. Supplément : les fichiers WeChat expirent généralement au bout de quelques jours. Si le fichier reçu par WeChat n'a pas été cliqué, le système WeChat l'effacera après 72 heures. Si le fichier WeChat a été consulté,

Sous Windows, l'application Photos constitue un moyen pratique d'afficher et de gérer des photos et des vidéos. Grâce à cette application, les utilisateurs peuvent facilement accéder à leurs fichiers multimédia sans installer de logiciel supplémentaire. Cependant, les utilisateurs peuvent parfois rencontrer des problèmes, tels que le message d'erreur « Ce fichier ne peut pas être ouvert car le format n'est pas pris en charge » lors de l'utilisation de l'application Photos, ou une corruption de fichier lorsqu'ils tentent d'ouvrir des photos ou des vidéos. Cette situation peut être déroutante et gênante pour les utilisateurs, nécessitant des investigations et des correctifs pour résoudre les problèmes. Les utilisateurs voient l'erreur suivante lorsqu'ils tentent d'ouvrir des photos ou des vidéos sur l'application Photos. Désolé, Photos ne peut pas ouvrir ce fichier car le format n'est pas actuellement pris en charge ou le fichier

Dans cet article, nous expliquerons comment résoudre le problème de l'invite « Prêt à supprimer » lors de la suppression de fichiers ou de dossiers dans le système Windows. Cette invite signifie que le système effectue certaines opérations en arrière-plan, telles que vérifier les autorisations du fichier, vérifier si le fichier est occupé par d'autres programmes, calculer la taille de l'élément à supprimer, etc. Nous vous proposerons quelques solutions de contournement pour vous assurer que vous pouvez supprimer vos fichiers avec succès sans attendre trop longtemps. Pourquoi Windows met-il autant de temps à supprimer des fichiers ? Le temps nécessaire à Windows pour préparer un fichier à la suppression dépend de divers facteurs, notamment la taille du fichier, la vitesse du périphérique de stockage et les processus en arrière-plan. Une invite « Préparation à la suppression » longue ou bloquée peut indiquer des ressources système insuffisantes, des erreurs de disque ou des problèmes de système de fichiers. exister

Les fichiers au format Tmp sont un format de fichier temporaire généralement généré par un système informatique ou un programme lors de l'exécution. Le but de ces fichiers est de stocker des données temporaires pour aider le programme à fonctionner correctement ou à améliorer les performances. Une fois l'exécution du programme terminée ou l'ordinateur redémarré, ces fichiers tmp ne sont souvent plus nécessaires. Par conséquent, pour les fichiers au format Tmp, ils sont essentiellement supprimables. De plus, la suppression de ces fichiers tmp peut libérer de l'espace sur le disque dur et assurer le fonctionnement normal de l'ordinateur. Cependant, avant de supprimer les fichiers au format Tmp, nous devons

Lors de la suppression ou de la décompression d'un dossier sur votre ordinateur, une boîte de dialogue d'invite « Erreur 0x80004005 : erreur non spécifiée » apparaît parfois. Comment devez-vous résoudre cette situation ? Il existe en fait de nombreuses raisons pour lesquelles le code d'erreur 0x80004005 est demandé, mais la plupart d'entre elles sont causées par des virus. Nous pouvons réenregistrer la DLL pour résoudre le problème. Ci-dessous, l'éditeur vous expliquera l'expérience de gestion du code d'erreur 0x80004005. . Certains utilisateurs reçoivent le code d'erreur 0X80004005 lors de l'utilisation de leur ordinateur. L'erreur 0x80004005 est principalement due au fait que l'ordinateur n'enregistre pas correctement certains fichiers de bibliothèque de liens dynamiques ou à un pare-feu qui n'autorise pas les connexions HTTPS entre l'ordinateur et Internet. Alors que diriez-vous

Quark Netdisk et Baidu Netdisk sont actuellement les logiciels Netdisk les plus couramment utilisés pour stocker des fichiers. Si vous souhaitez enregistrer les fichiers de Quark Netdisk sur Baidu Netdisk, comment procéder ? Dans ce numéro, l'éditeur a compilé les étapes du didacticiel pour transférer des fichiers d'un ordinateur Quark Network Disk vers Baidu Network Disk. Voyons comment le faire fonctionner. Comment enregistrer les fichiers du disque réseau Quark sur le disque réseau Baidu ? Pour transférer des fichiers de Quark Network Disk vers Baidu Network Disk, vous devez d'abord télécharger les fichiers requis depuis Quark Network Disk, puis sélectionner le dossier cible dans le client Baidu Network Disk et l'ouvrir. Ensuite, faites glisser et déposez les fichiers téléchargés depuis Quark Cloud Disk dans le dossier ouvert par le client Baidu Cloud Disk, ou utilisez la fonction de téléchargement pour ajouter les fichiers sur Baidu Cloud Disk. Assurez-vous de vérifier si le fichier a été transféré avec succès dans Baidu Cloud Disk une fois le téléchargement terminé. C'est ça

Le fichier gho est un fichier image GhostImage, qui est généralement utilisé pour sauvegarder l'intégralité des données du disque dur ou de la partition dans un fichier. Dans certains cas spécifiques, nous devons réinstaller ce fichier gho sur le disque dur pour restaurer le disque dur ou la partition à son état précédent. Ce qui suit explique comment installer le fichier gho. Tout d'abord, avant l'installation, nous devons préparer les outils et le matériel suivants : Fichier gho d'entité : assurez-vous d'avoir un fichier gho complet, qui a généralement un suffixe .gho et contient une sauvegarde.

La méthode de connexion au portail 192.168.0.1 est la suivante : saisissez http://192.168.0.1 dans la barre d'adresse du navigateur. La méthode de connexion pour analyser l'entrée 1168.0.1 est la suivante : saisissez http://192.168.0.1 dans la barre d'adresse du navigateur. Après avoir saisi le mot de passe du compte, vous pouvez accéder à une page et définir ou modifier les paramètres réseau importants pertinents. Cette URL est généralement la page de connexion des routeurs de marques telles que Tenda, Cisco, DX et Links. Si vous ne pouvez pas accéder à l'interface de gestion après l'avoir saisie, cela signifie que l'adresse est erronée. Supplément : Que signifie 192.168.0.1 ? 1168.0.1 est une adresse IP privée de classe C. Pour faire simple, 192.168.0.1 est une adresse IP.
