KOTLIN/JSにおけるNPMモジュールの使い方(第1部)
12016 ワード
KotlinjsはJavaScriptの利点と利点を組み合わせたJavaScriptプロジェクトを作成するエキサイティングな新しい方法です.プラス能力を簡単にテストを追加しても、プラットフォーム間でコードを共有します.
kotlinjsはKotlinコードをJavaScriptに移しているので、Kotlin言語の利点を楽しんでいる間、あなたにnodeJSプログラムを実行することのすべての利点を与えます.
があるmany use cases Kotlinjsのために、そして、このシリーズでは、我々は不活発なロボットをつくるでしょう.不調和は、友人と連絡を取り合うための素晴らしいプラットフォームであり、ボットを追加することは、その経験を豊かにすることができます.私たちは、このロボットをNPM
それで、どのように、あなたはKotlinjsを使っている不活発なロボットをつくりますか?これはやや大きな話題なので、このポストは3つのポストのシリーズで最初になるでしょう. このポストでは、我々はKotlinjsがどのようにノードモジュールを使用するかについて行きます.これはKotlinjsへのイントロのより多くで、不和をカバーしません. 次の投稿ではDiscOrdJSの実装とメッセージに対する対応について説明します. 最後のポストでは、私たちは、ボットが展開する前に予想通りに働くことを確認するためにいくつかの単体テストを加えます.
このシリーズの終わりには、それが実行しているコンピュータの名前と特定のメッセージに応答する小さな不調和ボットを持っているでしょう.この最初の部分では、ボットが起動時にコンソールに印刷されますが、メッセージへの応答は後に別の部分に来るでしょう.
コリン経験 JS経験 Intellijのアイデア(コミュニティ版を使っています)
始めるには、まずjs project setup 古林遺跡必ず選択する
これはプロジェクトを作成します
どのようにkotlinjsはノードモジュールを処理する方法に慣れることで始めることができます.
ボットに名前を付けてメッセージを送るには、単純なノードモジュールを使いましょうcomputer-name . プロジェクトの設定で述べたように、ノードモジュールは
したがって、この関数を使用するには、外部関数を使用して定義する必要があります.
Kotlin博士は、言及しますExternal Modifier , これは純粋なJavaScriptコードを宣言するために使用されます.これは、このクラスまたは関数がノードモジュールによって外部で定義されることを期待していることをコンパイラに伝えます.モジュールを使いたいときは、関数とクラスを定義しなければなりません.重要な注意点は以下の通りです.
ですから、参照する必要があるモジュール全体を定義する必要はありません.
だから私たちは
この定義はNPMページに基づいて理解するのが簡単でした、しかし、我々がわかるように、あなたはドキュメントを元の定義を見つけるためにノード・モジュールのソースコードに掘り下げなければならないかもしれません.
モジュールシステム
もう一つの定義は、モジュールシステムです.あなたは、より多くの情報を見つけることができますhere , しかし、短いkotlinjsサポート
端末でコンピュータの名前を見るべきです.おめでとう!では、インポートクラスを見てみましょう.
これまでのところ、我々は
この例では、YouTubeの動画を探すことができる小さなモジュールです(注:YouTube APIキーなしで結果を得ることはありませんが、コールはまだ必要です).NPMのページからは、カスタム結果を返す検索機能が表示されます.それで、我々はKotlinでこれをどう定義しますか?
このモジュールで定義がある間、我々はより多くの情報を得るために行く必要があります.それは非常に簡単に定義されているので、このモジュールは簡単にtypescriptで書かれている
デュカート
手動で変換する前に手動でkotlinコードに変換するには、このツールを自動的に行うにはDukat . それは簡単に変換を助けることができる強力なツールですが、このポストのために私は手動でどのようにそれが動作するかの良い理解を持っているので、手動でkotlinに変換する方法について行きたい.
手動で
レポオープンから
弦 カスタムオプションクラス オプションのエラーを返すコールバック、結果配列、pageInfo配列 それから、ファックは約束を返します.幸いにも、Kollinはエラーを定義します
JSON
我々は、単に
おめでとう、あなたは輸入NPMモジュールでKotlinjsプロジェクトを持っています!次の投稿ではDiscOrdJSを使用して私たちの不和のボットを作成するの詳細について行きます.
読書ありがとう!あなたが質問をするならば、コメントで知らせてください.また、あなたはTwitterで私に手を差し伸べることができます.
kotlinjsはKotlinコードをJavaScriptに移しているので、Kotlin言語の利点を楽しんでいる間、あなたにnodeJSプログラムを実行することのすべての利点を与えます.
があるmany use cases Kotlinjsのために、そして、このシリーズでは、我々は不活発なロボットをつくるでしょう.不調和は、友人と連絡を取り合うための素晴らしいプラットフォームであり、ボットを追加することは、その経験を豊かにすることができます.私たちは、このロボットをNPM
DiscordJS
.それで、どのように、あなたはKotlinjsを使っている不活発なロボットをつくりますか?これはやや大きな話題なので、このポストは3つのポストのシリーズで最初になるでしょう.
概要
このシリーズの終わりには、それが実行しているコンピュータの名前と特定のメッセージに応答する小さな不調和ボットを持っているでしょう.この最初の部分では、ボットが起動時にコンソールに印刷されますが、メッセージへの応答は後に別の部分に来るでしょう.
必要条件
ニュープロジェクト
始めるには、まずjs project setup 古林遺跡必ず選択する
NodeJS Application
, ないbrowser
)これはプロジェクトを作成します
Main.kt
ファイルと挨拶機能.プロジェクトを実行するには./gradlew run
端末で.ご覧くださいHello, YOUR_BOT_NAME
端末で!ノードモジュールのインポート
どのようにkotlinjsはノードモジュールを処理する方法に慣れることで始めることができます.
ボットに名前を付けてメッセージを送るには、単純なノードモジュールを使いましょうcomputer-name . プロジェクトの設定で述べたように、ノードモジュールは
build.gradle
ファイル.必要ありませんrequire
または特別なインポート.この行をあなたの依存関係に追加します.dependencies {
implementation(npm("computer-name", "0.1.0"))
}
あなたが電話しようとするならばcomputerName()
さて、あなたはUnresolved reference
エラーです.これはJavaScriptとKotlinの重要な違いのためです.Javascript is loosely typed and kotlin is strongly typed
したがって、この関数を使用するには、外部関数を使用して定義する必要があります.
外部
Kotlin博士は、言及しますExternal Modifier , これは純粋なJavaScriptコードを宣言するために使用されます.これは、このクラスまたは関数がノードモジュールによって外部で定義されることを期待していることをコンパイラに伝えます.モジュールを使いたいときは、関数とクラスを定義しなければなりません.重要な注意点は以下の通りです.
You only need to define what you are using
ですから、参照する必要があるモジュール全体を定義する必要はありません.
だから私たちは
computerName()
以下のように定義されているコンパイラに対して定義を行います.@JsModule("computer-name")
external fun computerName(): String
また、モジュール名で関数を注釈する必要があることに注意してください.compilerReferenceError
).この定義はNPMページに基づいて理解するのが簡単でした、しかし、我々がわかるように、あなたはドキュメントを元の定義を見つけるためにノード・モジュールのソースコードに掘り下げなければならないかもしれません.
モジュールシステム
もう一つの定義は、モジュールシステムです.あなたは、より多くの情報を見つけることができますhere , しかし、短いkotlinjsサポート
UMD
, AMD
and commonJS
システムcommonJS
ので、我々は追加されますnodejsのために広く使用されますuseCommonJs()
我々にbuild.gradle
ファイル.kotlin {
js(IR) {
useCommonJs()
}
}
今すぐ追加println(computerName())
to main()
プロジェクトを実行します.端末でコンピュータの名前を見るべきです.おめでとう!では、インポートクラスを見てみましょう.
NODEJSクラスのインポート
これまでのところ、我々は
computerName()
例として、一つの関数を持つ小さなモジュールです.また、プロジェクトで使用するモジュールからクラスやインターフェイスをインポートできるようにすることも重要です.この例では、YouTubeの動画を探すことができる小さなモジュールです(注:YouTube APIキーなしで結果を得ることはありませんが、コールはまだ必要です).NPMのページからは、カスタム結果を返す検索機能が表示されます.それで、我々はKotlinでこれをどう定義しますか?
このモジュールで定義がある間、我々はより多くの情報を得るために行く必要があります.それは非常に簡単に定義されているので、このモジュールは簡単にtypescriptで書かれている
index.d.ts
.デュカート
手動で変換する前に手動でkotlinコードに変換するには、このツールを自動的に行うにはDukat . それは簡単に変換を助けることができる強力なツールですが、このポストのために私は手動でどのようにそれが動作するかの良い理解を持っているので、手動でkotlinに変換する方法について行きたい.
手動で
レポオープンから
index.d.ts
ファイルと下部にスクロール機能を検索するスクロールします.declare function search(
term: string,
opts: search.YouTubeSearchOptions,
cb?: (err: Error, result?: search.YouTubeSearchResults[], pageInfo?: search.YouTubeSearchPageResults) => void
): Promise<{results: search.YouTubeSearchResults[], pageInfo: search.YouTubeSearchPageResults}>;
次のようになります.stdlib
また、約束のインポートも含みます.import kotlin.js.Promise
だから難しい部分は結果とオプションです.私たちはYouTubeSearchResults
and YouTubeSearchPageResults
インタフェースですので、以下のように簡単に定義できます:@file:JsModule("youtube-search")
// Note that for multiple definitions in the same file you can use @file
external interface YouTubeSearchPageResults {
val totalResults: Int
...
}
external interface YouTubeSearchResults {
val id: String
...
}
現在YouTubeSearchOptions
我々は同じアプローチをすることができました、しかし、我々が使うことができるもう一つのオプションがあります.JSON
我々は、単に
Json
クラスオブジェクトです.HashMap
. この方法では、インターフェイスを定義せずに、欲しいものを渡すことができます.あなたが通過されるオブジェクトの明確な定義を見つけることができないならば、これもよく働きます.import kotlin.js.Json
val options = json(
Pair("maxResults", 1),
Pair("key", YOUR_YOUTUBE_API_KEY) // Leave this blank if you don't have one
)
このようにして、外部検索関数を作成することができます.@JsModule("youtube-search")
external fun search(
term: String,
opts: Json,
cb: (
err: Error?,
result: Array<YouTubeSearchResults>?,
pageInfo: YouTubeSearchPageResults?
) -> Unit // Unit acts as Void in kotlin
) : Promise<Json>
search("your search", options) { err, result, pageInfo ->
print("Youtube callback $err, $result, $pageInfo\n")
}
プロジェクトに追加して実行します.APIキーを持っていないなら、端末でこれを見てください.Youtube callback Error: Request failed with status code 403, null, null
APIキーを持っているなら、次のようになります.Youtube callback null, [...], [object Object]
結論
おめでとう、あなたは輸入NPMモジュールでKotlinjsプロジェクトを持っています!次の投稿ではDiscOrdJSを使用して私たちの不和のボットを作成するの詳細について行きます.
読書ありがとう!あなたが質問をするならば、コメントで知らせてください.また、あなたはTwitterで私に手を差し伸べることができます.
Reference
この問題について(KOTLIN/JSにおけるNPMモジュールの使い方(第1部)), 我々は、より多くの情報をここで見つけました https://dev.to/kevinschildhorn/how-to-use-npm-modules-in-kotlinjs-discord-bot-series-part-1-51niテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol