@RP Niemeyer がコメントしたように、個別のバインディング、拡張機能、およびビュー モデルも配置しました。その理由は、フロント エンド コードのよりモジュール化された設計が可能になるからです。いつ機能を再利用する必要があるかわかりません。また、バインディング、拡張機能、およびビュー モデルが相互にどのように相互作用するかをテストせずに、個別の単体テストを記述して、可能な限り最小の単位に分割することもできます。
\js
\js\tests
\js\tests\knockoutExtensionTests
\js\tests\jqueryExtensionTests
\js\tests\firstBindingTest.js
\js\tests\secondBindingTest.js
\js\tests\firstVmTest.js
\js\tests\secondVmTest.js
\js\extensions
\js\extensions\knockoutExtension.js
\js\extensions\jqueryExtensions.js
\js\bindings
\js\bindings\firstBinding.js
\js\bindings\secondBinding.js
\js\viewmodels
\js\viewmodels\firstVM.js
\js\viewmodels\secondVM.js
また、機能を追加するために jQuery などの別のライブラリをいつ拡張する必要があるのか わからないため、ノックアウト拡張機能のみに限定しません。これは、個別にロードするファイルがたくさんあるように見えるかもしれませんが、現在出回っているバンドルおよび縮小ツールを使用すると、本番環境ではほとんど気付かないでしょう。