ホームページ ウェブフロントエンド jsチュートリアル Vue ソース コード エントリ ファイルのサンプル分析

Vue ソース コード エントリ ファイルのサンプル分析

Jan 31, 2018 pm 01:11 PM
入り口 事例分析 書類

この記事では、主に Vue のソース コード エントリ ファイルの分析を紹介します (推奨)。これが非常に優れていると思うので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

私はしばらく Vue プロジェクトを開発していて、以前は angularjs を使用していましたが、その時はソース コードを見て自分の考えを記録する時間がありませんでした。もう苦労して考え続けたいです! !

私自身、ソースコードを読むたびにとても幸せな気分になります。あなたも私と同じでしょうか。

vue のソース コードは、package.json から確認できるロールアップ ツールを使用して多くのモジュールからマージされています。それでは、github から vue プロジェクトをダウンロードして、今日から「思考」を始めてみましょう。

私がダウンロードしたソースコードのバージョンは: "version": "2.5.7",

ソースコードの開始位置はここから確認できます


"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
 },
ログイン後にコピー

見つかった開始ファイルは "web/entry" -runtime-with" -compiler.js" を選択し、Vue オブジェクトをずっと検索して、最終的に "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)
}
ログイン後にコピー

ここで終わっているようです。目的は開始位置を見つけることですが、質問があります。なぜ Vue にはこれほど多くのレイヤーが必要なのでしょうか?


entry-runtime-with-compiler.js
->
runtime/index.js
->
core/index.js
->
instance/index.js
ログイン後にコピー

ソース コードを注意深く見ていて、突然気づきました。これらのファイルが最初に行うこと:

(1)instance/index.js

Vue モジュールの名前、instance (インスタンス) からいくつかのヒントがわかります。

このファイルは Vue オブジェクトの始まりであり、Vue プロトタイプ チェーン (プロトタイプ) メソッドの集中ファイルでもあります


// _init
initMixin(Vue)
// $set、$delete、$watch
stateMixin(Vue)
// $on、$once、$off、$emit
eventsMixin(Vue)
// _update、$forceUpdate、$destroy
lifecycleMixin(Vue)
// $nextTick、_render、以及多个内部调用的方法
renderMixin(Vue)
ログイン後にコピー

これらのメソッドはインスタンス化された後にのみ呼び出すことができます。

(2) core/index.js

このファイルは、Instance/index.jsの作成と初期処理後に再度処理されます。 それで、彼は主に何をしていましたか? 実行環境は考慮しません


initGlobalAPI(Vue)
ログイン後にコピー

はい、このメソッドを呼び出しただけです。非常にシンプルで明確です。「グローバルインターフェイスの初期化」です。

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)
}
ログイン後にコピー

。これは基本的にすべてです。これは静的メソッドです。つまり、Vue.xxx の形式で呼び出されます。

(3) runtime/index.js

Vue.prototypeにいくつかの拡張機能と__patch__と$mount(マウント要素)が追加されています。


// 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

Vue が行うことの 1 つは、異なる実行環境に応じて異なる $mount を書き換えることです


const mount = Vue.prototype.$mount
Vue.prototype.$mount = function (
 el?: string | Element,
 hydrating?: boolean
): Component {
 ...
 return mount.call(this, el, hydrating)
}
ログイン後にコピー

概要:

この時点で、実行を開始するファイルが見つかりました。各ファイルが何に使用されるか、具体的にはどのように実行するか、そして何が行われたかについては次回書きます。しかし、最初は細かいことを気にしすぎるべきではなく、コードのすべての行を理解する必要もありません。そうであれば、それは非常に疲れるでしょうし、続ける勇気がないかもしれません。

関連する推奨事項:

webpack マルチエントリファイルページのパッケージ化の詳細な説明

以上がVue ソース コード エントリ ファイルのサンプル分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

期限切れの WeChat ファイルを復元する方法? 期限切れの WeChat ファイルは復元できますか? 期限切れの WeChat ファイルを復元する方法? 期限切れの WeChat ファイルは復元できますか? Feb 22, 2024 pm 02:46 PM

WeChat を開き、[自分の設定] を選択し、[一般] を選択してから [記憶域スペース] を選択し、[記憶域スペース] で [管理] を選択し、ファイルを復元する会話を選択して、感嘆符アイコンを選択します。チュートリアル 適用モデル: iPhone13 システム: iOS15.3 バージョン: WeChat 8.0.24 分析 1 まず、WeChat を開き、マイページの [設定] オプションをクリックします。 2 次に、設定ページで [一般オプション] を見つけてクリックします。 3次に、一般ページで「記憶域スペース」をクリックします。 4 次に、ストレージスペースページで「管理」をクリックします。 5最後に、ファイルを回復したい会話を選択し、右側の感嘆符アイコンをクリックします。補足: WeChat ファイルの有効期限は通常、数日です。WeChat で受信したファイルがクリックされなかった場合、WeChat システムは 72 時間後にそのファイルを消去します。WeChat ファイルが閲覧された場合、

Windows 11/10 では削除の準備に時間がかかります Windows 11/10 では削除の準備に時間がかかります Feb 19, 2024 pm 07:42 PM

この記事では、Windowsシステムでファイルやフォルダーを削除するときに「削除の準備ができました」というメッセージが表示される問題の解決方法を紹介します。このプロンプトは、ファイルのアクセス許可のチェック、ファイルが他のプログラムによって占有されているかどうかの確認、削除する項目のサイズの計算など、システムがバックグラウンド操作を実行していることを意味します。あまり長く待たずにファイルを正常に削除できるようにするための回避策をいくつか紹介します。 Windows がファイルを削除するのにこれほど時間がかかるのはなぜですか? Windows がファイルの削除を準備するのにかかる時間は、ファイル サイズ、ストレージ デバイスの速度、バックグラウンド プロセスなどのさまざまな要因の影響を受けます。 「削除の準備をしています」というプロンプトが長い、または停止している場合は、システム リソースの不足、ディスク エラー、またはファイル システムの問題を示している可能性があります。存在する

形式がサポートされていないか、ファイルが破損しているため、写真ではこのファイルを開けません 形式がサポートされていないか、ファイルが破損しているため、写真ではこのファイルを開けません Feb 22, 2024 am 09:49 AM

Windows では、フォト アプリは写真やビデオを表示および管理するのに便利な方法です。このアプリケーションを通じて、ユーザーは追加のソフトウェアをインストールすることなく、マルチメディア ファイルに簡単にアクセスできます。ただし、写真アプリの使用時に「形式がサポートされていないため、このファイルを開けません」というエラー メッセージが表示されたり、写真やビデオを開こうとしたときにファイルが破損したりするなど、ユーザーが何らかの問題に遭遇することがあります。この状況はユーザーにとって混乱を招き不便になる可能性があり、問題を解決するには調査と修正が必要になります。ユーザーが写真アプリで写真またはビデオを開こうとすると、次のエラーが表示されます。申し訳ありませんが、この形式が現在サポートされていないか、ファイルがサポートされていないため、フォトではこのファイルを開くことができません

Tmp形式のファイルは削除できますか? Tmp形式のファイルは削除できますか? Feb 24, 2024 pm 04:33 PM

tmp 形式ファイルは、通常、コンピュータ システムまたはプログラムの実行中に生成される一時ファイル形式です。これらのファイルの目的は、プログラムを適切に実行したり、パフォーマンスを向上させるために一時データを保存することです。プログラムの実行が完了するか、コンピュータが再起動されると、多くの場合、これらの tmp ファイルは必要なくなります。したがって、Tmp 形式のファイルは基本的に削除可能です。さらに、これらの tmp ファイルを削除すると、ハード ディスクの空き容量が確保され、コンピュータが正常に動作するようになります。ただし、Tmp 形式のファイルを削除する前に、次のことを行う必要があります。

Quark Cloud Disk から Baidu Cloud Disk にファイルを転送するにはどうすればよいですか? Quark Cloud Disk から Baidu Cloud Disk にファイルを転送するにはどうすればよいですか? Mar 14, 2024 pm 02:07 PM

Quark Netdisk と Baidu Netdisk は現在、ファイルの保存に最も一般的に使用されている Netdisk ソフトウェアです。Quark Netdisk 内のファイルを Baidu Netdisk に保存したい場合は、どうすればよいですか?今回は、Quark Network Disk コンピュータから Baidu Network Disk にファイルを転送するためのチュートリアル手順を編集者がまとめたので、その操作方法を見てみましょう。 QuarkネットワークディスクファイルをBaiduネットワークディスクに保存するにはどうすればよいですか? Quark Network Disk から Baidu Network Disk にファイルを転送するには、まず Quark Network Disk から必要なファイルをダウンロードし、次に Baidu Network Disk クライアントでターゲット フォルダーを選択して開きます。次に、Quark Cloud Disk からダウンロードしたファイルを Baidu Cloud Disk クライアントによって開かれたフォルダーにドラッグ アンド ドロップするか、アップロード機能を使用してファイルを Baidu Cloud Disk に追加します。アップロードが完了したら、Baidu Cloud Disk にファイルが正常に転送されたかどうかを必ず確認してください。それでおしまい

0x80004005 エラー コードが表示された場合の対処方法 エディターは、0x80004005 エラー コードを解決する方法を説明します。 0x80004005 エラー コードが表示された場合の対処方法 エディターは、0x80004005 エラー コードを解決する方法を説明します。 Mar 21, 2024 pm 09:17 PM

パソコン上のフォルダーを削除または解凍するときに、「エラー 0x80004005: 不明なエラー」というダイアログ ボックスが表示されることがあります。この状況はどう解決すればよいでしょうか?エラー コード 0x80004005 が表示される理由は実際にはたくさんありますが、そのほとんどはウイルスによって引き起こされます。DLL を再登録して問題を解決できます。以下では、エディターがエラー コード 0x80004005 の処理体験を説明します。 。一部のユーザーは、コンピュータの使用時にエラー コード 0X80004005 を表示されます。0x80004005 エラーは主に、コンピュータが特定のダイナミック リンク ライブラリ ファイルを正しく登録していないこと、またはファイアウォールがコンピュータとインターネット間の HTTPS 接続を許可していないことが原因で発生します。それでどうですか

192.168.0.1 の入り口 192.168.0.1 のログイン入り口はどこですか? 192.168.0.1 の入り口 192.168.0.1 のログイン入り口はどこですか? Feb 22, 2024 pm 03:01 PM

192.168.0.1 ポータルへのログイン方法は次のとおりです。ブラウザのアドレス バーに http://192.168.0.1 と入力します。 1168.0.1 入口を分析するためのログイン方法は次のとおりです: ブラウザのアドレス バーに http://192.168.0.1 と入力し、アカウントのパスワードを入力した後、ページに入り、関連する重要なネットワーク パラメータを設定または変更できます。この URL は通常、Tenda、Cisco、D-X、Links などのブランドのルーターのログイン ページです。管理インターフェースを入力しても入力できない場合は、アドレスが間違っていることを意味します。補足: 192.168.0.1 とはどういう意味ですか? 1168.0.1 はクラス C のプライベート IP アドレスで、簡単に言うと 192.168.0.1 は IP アドレスです。

hiberfil.sys ファイルとは何ですか? hiberfil.sysは削除できますか? hiberfil.sys ファイルとは何ですか? hiberfil.sysは削除できますか? Mar 15, 2024 am 09:49 AM

最近、多くのネチズンが編集者に「hiberfil.sys ファイルとは何ですか?」と尋ねました。 hiberfil.sys は C ドライブのスペースを多く消費し、削除される可能性がありますか?エディターは、hiberfil.sys ファイルを削除できることを通知します。以下で詳細を見てみましょう。 hiberfil.sys は Windows システムの隠しファイルであり、システム休止状態ファイルでもあります。通常、C ドライブのルート ディレクトリに保存され、そのサイズはシステムに搭載されているメモリのサイズと同等です。このファイルはコンピュータが休止状態になっているときに使用され、リカバリ中に以前の状態にすばやく復元できるように、現在のシステムのメモリ データが含まれています。そのサイズはメモリ容量と等しいため、より多くのハードドライブスペースを占有する可能性があります。冬休み

See all articles