独自のJavaScriptライブラリをビルドして公開:詳細ガイド
コアポイント
ライブラリをよく使用します。ライブラリは、開発者がプロジェクトで使用できるパッケージ化されたコードであり、ワークロードを節約し、ホイールの重複を回避します。再利用可能なパッケージ(オープンソースまたはクローズドソースの両方)を使用することは、同じ機能を再構築したり、過去のプロジェクトから手動でコピーしたりするよりも優れています。
しかし、パッケージ化されたコード以外に、ライブラリとは正確には何ですか?いくつかの例外を除き、ライブラリは常に単一のファイル、または単一のフォルダーにあるいくつかのファイルである必要があります。そのコードは個別に維持する必要があり、プロジェクトに実装されている場合は同じままです。ライブラリを使用すると、プロジェクト固有の構成および/または動作を設定できる必要があります。 USBポートを介した通信のみを許可するUSBデバイスと考えてください。マウスやキーボードなどの一部のデバイスは、デバイスが提供するインターフェイスを介して構成を許可します。
この記事では、図書館の構築方法を説明します。対象となるトピックのほとんどは他の言語に適していますが、この投稿はJavaScriptライブラリの構築に焦点を当てています。なぜ独自のJavaScriptライブラリを構築するのですか?
まず、ライブラリは既存のコードの再利用を非常に便利にします。古いプロジェクトを掘り出したり、いくつかのファイルをコピーする必要はありません。ライブラリを持ち込むだけです。また、これによりアプリケーションが断片化され、アプリケーションコードベースが小さく、メンテナンスが容易になります。
人気のあるオープンソースプロジェクトは、大きな機会をもたらすこともできます。会社はあなたの仕事の質に感銘を受け、あなたに仕事を提供するかもしれません。たぶん、会社があなたのプロジェクトを彼らのアプリケーションに統合するのを助けてくれるようにあなたに頼むでしょう。結局のところ、あなたよりもあなたの図書館をよく知っている人はいません。
多くの人にとって、それは単なる趣味です。コードを書く、他の人を助け、その過程で学習と成長のプロセスを楽しんでいます。制限を押して、新しいことを試すことができます。スコープとターゲット
コードの最初の行を書く前に、ライブラリの目的が何であるかを明確にする必要があります。目標を設定する必要があります。それらを使用すると、ライブラリで解決したい問題に集中できます。覚えておいてください、あなたのライブラリは、元の質問のフォームよりも使いやすく、覚えておくべきであることを忘れないでください。 APIが簡単になればなるほど、ユーザーがライブラリの使用を学ぶことが簡単になります。 UNIX哲学を引用:
1つだけのことをして、それをうまくやる
ライブラリのサイズに関係なく、ロードマップを作成してみてください。必要なすべての機能をリストし、最小の実行可能な製品のような小さくても完全に機能するライブラリができるまで、できるだけ多くの機能を削除します。これはあなたの最初のバージョンになります。そこから、新しい機能ごとにマイルストーンを作成できます。基本的に、プロジェクトを小さな部分に分解し、各機能を成果のようにし、より楽しいものにします。私を信じてください、これはあなたを正気に保ちます。自問してみてください:あなたの図書館はどのような問題を解決しますか?どのように解決しますか?すべてを自分で書いてくれませんか、それとも他の誰かのライブラリを使用できますか?
APIデザイン
個人的には、エンドユーザーの観点からライブラリを処理するのが本当に好きです。ユーザー中心のデザインと呼ぶことができます。基本的に、あなたはそれについてもっと考え、それを使用することを選択した人にとってより便利にすることを望んで、ライブラリの要約を作成しています。同時に、この記事の後半で説明するカスタマイズ可能な側面を検討することができます。
以下は、ユーザーエージェント文字列ライブラリの実装または要約が次のようになるものです。
<code>// 以空的UserAgent字符串开始 var userAgent = new UserAgent; // 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us) var application = new UserAgent.Product('EvilCorpBrowser', '1.2'); application.setComment('X11', 'Linux', 'en-us'); userAgent.addProduct(application); // 创建并添加第二个产品:Blink/20420101 var engine = new UserAgent.Product('Blink', '20420101'); userAgent.addProduct(engine); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 userAgent.toString(); // 对引擎产品进行更多更改 engine.setComment('Hello World'); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World) userAgent.toString(); </code>
柔軟性とカスタマイズ
ユーザーに制御を提供する方法はいくつかあります。構成、パブリック方法の公開、コールバックやイベントを介して。 通常、
ライブラリの構成は初期化中に行われますが、一部のライブラリを使用すると、実行時にオプションを変更できます。通常、オプションは詳細に限定されます。これらのオプションを変更すると、後で使用するためにこれらの値を更新する以外は何もしません。
メソッドは、インスタンスからデータの取得、インスタンス(セッター)にデータを配置する、操作の実行など、インスタンスと対話するために開示することができます。
<code>// 在初始化时配置 var userAgent = new UserAgent({ commentSeparator: ';' }); // 使用公共方法进行运行时配置 userAgent.setOption('commentSeparator', '-'); // 使用公共属性进行运行时配置 userAgent.commentSeparator = '-'; </code>
コールバックは、通常は非同期タスクの後にユーザーコードを実行しているパブリックメソッドに渡されることがあります。
<code>var userAgent = new UserAgent; // 获取器,用于从所有产品中检索注释 userAgent.getComments(); // 用于打乱所有产品顺序的操作 userAgent.shuffleProducts(); </code>
イベントには大きな可能性があります。イベントハンドラーを追加することはアクションをトリガーしないでください。イベントは通常、イベントを示すために使用されます(推測したかもしれません)!コールバックと同様に、ライブラリが使用できる追加情報と返品値を提供できます。
<code>var userAgent = new UserAgent; userAgent.doAsyncThing(function asyncThingDone() { // 异步操作完成后运行代码 }); </code>
場合によっては、ユーザーがライブラリを拡張できるようにすることができます。これを行うには、Angular Module(Angular.module( 'mymodule'))やjqueryのfn(jquery.fn.myplugin)のように、ユーザーが充填できるパブリックメソッドまたはプロパティを公開するか、ユーザーにアクセスできるようにすることができます。ライブラリの名前空間へ:
<code>var userAgent = new UserAgent; // 验证添加的产品 userAgent.on('product.add', function onProductAdd(e, product) { var shouldAddProduct = product.toString().length // 告诉库添加或不添加产品 return shouldAddProduct; }); </code>
繰り返しますが、これによりメソッドをオーバーライドできます。
<code>// AngryUserAgent 模块 // 可以访问UserAgent命名空间 (function AngryUserAgent(UserAgent) { // 创建新的方法 .toAngryString() UserAgent.prototype.toAngryString = function() { return this.toString().toUpperCase(); }; })(UserAgent); // 应用程序代码 var userAgent = new UserAgent; // ... // EVILCORPBROWSER/1.2 (X11; LINUX; EN-US) BLINK/20420101 userAgent.toAngryString(); </code>
テスト
<code>// AngryUserAgent 模块 (function AngryUserAgent(UserAgent) { // 存储旧的 .toString() 方法以供以后使用 var _toString = UserAgent.prototype.toString; // 覆盖 .toString() UserAgent.prototype.toString = function() { return _toString.call(this).toUpperCase(); }; })(UserAgent); var userAgent = new UserAgent; // ... // EVILCORPBROWSER/1.2 (X11; LINUX; EN-US) BLINK/20420101 userAgent.toString(); </code>
概要を書くことは、テスト駆動型開発の良いスタートです。要するに、これは実際のライブラリを書く前にテストフォームを書き留めるための標準です。これらのテストで、機能が予想どおりに動作することを確認し、ライブラリを作成する前にこれらのテストを作成した場合、戦略は行動駆動型開発と呼ばれます。いずれにせよ、テストがライブラリ内のすべての機能をカバーし、コードがすべてのテストに合格した場合、ライブラリが機能すると安全に想定できます。
Jani Hartikainenは、「JavaScriptを使用するためにMochaとChaiを使用する」で単体テストを書く方法を説明しています。 「ジャスミン、トラビス、カルマによるJavaScriptのテスト」で、Tim Evkoは、Jasmineという別のフレームワークで優れたテストパイプラインをセットアップする方法を示しています。これらの2つのテストフレームワークは非常に人気がありますが、他にも多くの種類のフレームワークがあります。
この記事で前半に作成した要約は、予想される出力についてコメントしています。これは、すべてのテストが始まる場所です。期待から始めます。私のライブラリのジャスミンテストは次のとおりですAPIデザインの最初のバージョンに完全に満足したら、アーキテクチャとライブラリの使用方法について考え始める時が来ます。
<code>// 以空的UserAgent字符串开始 var userAgent = new UserAgent; // 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us) var application = new UserAgent.Product('EvilCorpBrowser', '1.2'); application.setComment('X11', 'Linux', 'en-us'); userAgent.addProduct(application); // 创建并添加第二个产品:Blink/20420101 var engine = new UserAgent.Product('Blink', '20420101'); userAgent.addProduct(engine); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 userAgent.toString(); // 对引擎产品进行更多更改 engine.setComment('Hello World'); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World) userAgent.toString(); </code>
モジュールローダーの互換性
実際には、選択する必要はありません!ユニバーサルモジュール定義(UMD)は、複数のモジュールローダーをサポートするように設計された別の戦略です。さまざまなバージョンのコードスニペットをオンラインで見つけることができます。また、UMD GitHubリポジトリにUMDの異なるバージョンを見つけるために、UMDとライブラリを互換性のあるものにすることもできます。テンプレートの1つでライブラリを起動するか、お気に入りのビルドツールでUMDを追加すると、モジュールローダーを心配する必要がありません。
私はすべてのプロジェクトの徹底的な文書を完全に支持していますが、これは多くの仕事と見なされ、遅れ、最終的に忘れられていることがよくあります。
ドキュメントは、プロジェクト名や説明などの基本情報から常に開始する必要があります。これは、他の人があなたの図書館の機能とそれが彼らのために働くかどうかを理解するのに役立ちます。
API、チュートリアル、および例
もちろん、ライブラリの使用方法をユーザーに知らせる必要があります。これは、APIドキュメントから始まります。チュートリアルと例は素晴らしい追加ですが、これらを書くには多くの作業が必要です。ただし、インラインドキュメントには当てはまりません。これらは、解析でき、JSDOCを使用してドキュメントページに変換できるコメントです。
一部のユーザーは、ライブラリを変更したい場合があります。ほとんどの場合、これは貢献のためですが、一部の人々はプライベート使用のためのカスタムバージョンを作成したいと考えています。これらのユーザーの場合、メタタスクを含むドキュメントは、ライブラリを構築するためのコマンドのリスト、テストの実行、生成、変換、またはデータのダウンロードなど、有用です。
貢献は非常に重要です。貢献者を導くために、ドキュメントを追加して、貢献する手順とそれが満たすべき基準を説明することができます。これにより、貢献を見やすく受け入れ、貢献を容易にしやすくなります。
最後になりましたが、ライセンスを含めてください。技術的には、ライセンスを含めないことを選択した場合、それはまだ著作権でありませんが、誰もがこれを知っているわけではありません。
Choosealicense.comは、法律専門家にならずにライセンスを選択するための優れたリソースであることがわかりました。ライセンスを選択した後、プロジェクトのルートディレクトリにlicense.txtファイルにテキストを保存するだけです。
バージョン化は、優れたライブラリに不可欠です。大きな変更を行うことを選択した場合、ユーザーは自分のために機能するバージョンを使用し続けることをお勧めします。
現在の事実上のバージョンの命名基準は、セマンティックバージョンコントロール、またはsemverです。 SEMVERバージョンは、3つの数値で構成され、それぞれが異なる変更を表しています:プライマリ、マイナー、およびパッチバージョン。
GITリポジトリをお持ちの場合は、バージョン番号をリポジトリに追加できます。それらをリポジトリのスナップショットと考えることができます。私たちはそれをラベルと呼びます。タグを作成するには、端末を開き、タイプを開きます。
<code>// 以空的UserAgent字符串开始 var userAgent = new UserAgent; // 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us) var application = new UserAgent.Product('EvilCorpBrowser', '1.2'); application.setComment('X11', 'Linux', 'en-us'); userAgent.addProduct(application); // 创建并添加第二个产品:Blink/20420101 var engine = new UserAgent.Product('Blink', '20420101'); userAgent.addProduct(engine); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 userAgent.toString(); // 对引擎产品进行更多更改 engine.setComment('Hello World'); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World) userAgent.toString(); </code>
パブリックリポジトリへの公開
node.js(スタンドアロンJavaScriptエンジン)にはNPMが付属しています。 NPMに慣れていない場合は、優れた初心者向けガイドがあります。
デフォルトでは、NPMパッケージは公開されます。心配しないで!また、プライベートパッケージを公開したり、プライベートレジストリをセットアップしたり、完全に公開したりすることもできます。
パッケージを公開するには、プロジェクトがpackage.jsonファイルが必要です。これを手動で行うか、インタラクティブなウィザードを使用できます。ウィザードを開始するには、タイプ:
<code>// 在初始化时配置 var userAgent = new UserAgent({ commentSeparator: ';' }); // 使用公共方法进行运行时配置 userAgent.setOption('commentSeparator', '-'); // 使用公共属性进行运行时配置 userAgent.commentSeparator = '-'; </code>
の後、次のコマンドを入力してパッケージを公開できます。
それだけです! NPMパッケージを投稿しました。
<code>var userAgent = new UserAgent; // 获取器,用于从所有产品中检索注释 userAgent.getComments(); // 用于打乱所有产品顺序的操作 userAgent.shuffleProducts(); </code>
bower
Bowerに慣れていない場合は、初心者向けガイドもあります。
npmと同様に、プライベートリポジトリをセットアップすることもできます。また、ウィザードで完全に公開するのを防ぐこともできます。
興味深いことに、過去1〜2年にわたって、多くの人々がフロントエンドのリソースのためにNPMに目を向けているようです。 NPMパッケージは主にJavaScriptですが、多くのフロントエンドパッケージもNPMにリリースされます。いずれにせよ、Bowerはまだ非常に人気があるので、バウアーにもパッケージを投稿することをお勧めします。
Bowerは実際にはNPMモジュールであり、当初それに触発されたと言いましたか?コマンドは非常に似ています。 bower.jsonファイルを生成するには、タイプ:
npm initと同じように、説明は自明です。最後に、パッケージを公開:<code>// 以空的UserAgent字符串开始 var userAgent = new UserAgent; // 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us) var application = new UserAgent.Product('EvilCorpBrowser', '1.2'); application.setComment('X11', 'Linux', 'en-us'); userAgent.addProduct(application); // 创建并添加第二个产品:Blink/20420101 var engine = new UserAgent.Product('Blink', '20420101'); userAgent.addProduct(engine); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 userAgent.toString(); // 对引擎产品进行更多更改 engine.setComment('Hello World'); // EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World) userAgent.toString(); </code>
それだけです、あなたは誰もが彼らのノードプロジェクトやウェブで使用できるようにあなたのライブラリをインターネットに投稿しました!
<code>// 在初始化时配置 var userAgent = new UserAgent({ commentSeparator: ';' }); // 使用公共方法进行运行时配置 userAgent.setOption('commentSeparator', '-'); // 使用公共属性进行运行时配置 userAgent.commentSeparator = '-'; </code>
結論
私が言及したタスクの多くは、テストの実行、タグの作成、package.jsonのバージョンの更新、パッケージのNPMとBowerへの再発行など、自動化が簡単です。これは、継続的な統合の領域に入り、Travis CIやJenkinsなどのツールを使用する場所です。 Tim Evkoの記事についてもこれについても触れています。
ライブラリを構築して公開しましたか?以下のコメントセクションで共有してください!
あなた自身のJavaScriptライブラリの設計と構築に関するよくある質問(FAQ)私自身のJavaScriptライブラリを作成することの利点は何ですか?
JavaScriptライブラリを作成する最初のステップは、その目的を定義することです。ライブラリにどのような機能を提供したいですか?ライブラリに何をしたいかを明確に理解したら、コードの書き込みを開始できます。これには通常、必要な関数を提供する一連の関数を定義します。これらの機能は、他の開発者が使用できる公共のAPIを介して公開されます。
テストは、JavaScriptライブラリの開発の重要な部分です。 Jest、Mocha、Jasmineなど、いくつかのJavaScriptテストフレームワークが利用可能です。これらのフレームワークを使用すると、機能のユニットテストを作成し、予想どおりに機能することを確認できます。単体テストに加えて、ライブラリの異なる部分が連携しているかどうかを確認するために統合テストを作成する必要がある場合があります。
どのソフトウェアライブラリにとっても良いドキュメントが不可欠です。他の開発者があなたのライブラリの使用方法と各機能が何をするかを理解するのに役立ちます。入力、出力、および副作用など、ライブラリに各機能の詳細な説明を含める必要があります。 JSDOCなどのツールを使用して、コードコメントに基づいてドキュメントを自動的に生成することもできます。
JavaScriptライブラリを配布する方法は複数あります。一般的な方法は、NPMのようなパッケージマネージャーに公開することです。これにより、他の開発者は簡単なコマンドを使用してライブラリを簡単にインストールできます。また、ライブラリをCDN(コンテンツ配信ネットワーク)でホストしたり、Webサイトでダウンロードリンクを提供したりして配布することもできます。
JavaScriptライブラリが効率的であることを確認するにはどうすればよいですか?
JavaScriptライブラリをさまざまなブラウザと互換性のあるものにするにはどうすればよいですか?
JavaScriptライブラリのエラーを処理するにはどうすればよいですか?
JavaScriptライブラリでフィードバックを取得するにはどうすればよいですか?
以上が独自のJavaScriptライブラリを設計および構築する:ヒントとトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。