問題タブ [cujojs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dojo - dojo ビルドシステムを使用した wirejs と dojo
依存性注入にwirejsを使用するdojoアプリケーションがあります。
アプリケーションをビルドしようとすると、「when」モジュールと「meld」モジュールで依存関係エラーが発生します。次のように:
私の道場ビルド プロファイルの関連部分は次のとおりです。
ここで何か不足していますか?
ありがとう !
dojo - dojo ビルドシステムを使用した wirejs と dojo (2)
(これは、 dojo ビルド システムを使用する wirejs および dojo と同じ質問ですが、問題と試行された解決策についての詳細が記載されています。これはコメントで提案されたため、重複する質問が作成されます)。
Wire を使用する Dojo アプリケーションをビルドすると、Dojo ローダーは「./lib/context」に対してエラーをスローしますが、undefinedModuleこれを取り除くことはできません。
wire私は、git サブモジュールを使用して、大規模な作業中の dojo プロジェクトに追加しました。cujojswhenと cujojsmeldも必要であることがわかりました。それらもgitサブモジュールとして追加しました。
このプロジェクトでは、ライブラリはアプリケーション フォルダ ( ) の隣ではなくsrc/app、1 レベル深い にありsrc/libます。、 、 、 などがあります。ライブラリは、src/lib/wire、src/lib/when、src/lib/meldの2 レベルの深さです。src/lib/dgriddojosrc/lib/dojo/dojosrc/lib/dojo/dijitsrc/lib/dojo/dojoxsrc/lib/dojo/util
バージョン:
- 道場 1.10.4
- ワイヤー 0.10.9
- 3.7.2のとき
- メルド1.3.1
次のパッケージ定義を に追加すると、開発 (アンビルド) で機能しますdojoConfig。
mainエントリを追加する必要があることに注意してください。これにより、たとえば、cujojs コードが内部的に行う の代わりに、依存関係リスト内でwhen/when.jsasを参照することが可能になります。"when""when/when"
したがって、これは開発モードで機能します。
次に、ビルドを機能させようとしました。
にbuild.profile.js、パッケージ参照を再度追加しました。ビルドは、さまざまな方法でそのように失敗します。
まず、パッケージの場合、Dojo ビルダーは、パッケージのビルド構成を本質的に定義するファイルまたはファイルを参照する、ファイルdojoBuild内のプロパティを予期します。ほとんどの場合、このビルド構成は (すべてのパッケージに含まれています) 単なるオブジェクトであり、どのファイルがパッケージ内の AMD リソースであるか、どのファイルがテストであるか、およびどのファイルをそのままコピーする必要があるかを定義する関数を備えています。package.json<mypackage>.profile.jspackage.jsresourceTags
cujojs パッケージには、dojo ビルダーで使用できるそのようなビルド定義はありません。
ビルダーは、最初にこれらのパッケージのビルド構成がないこと、次にリソースが AMD リソースとしてフラグ付けされていないことを訴えます (これがこのビルド構成ファイルの主な理由です)。
使用している外部ライブラリのファイルを変更したくないのでdojoBuild、cujojs パッケージにプロパティとビルド構成ファイルを追加する気はなく、回避策を探しました。
package.jsonDojo ビルダー コードをステップ実行した後、ビルダーはファイルにプロパティがないことを訴えていることがわかりましたdojoBuildが、最終的には内部パッケージ定義構造を調べてresourceTagsオブジェクトを取得するだけです。内部パッケージ定義構造は、メイン ビルド プロファイルのパッケージ定義から始まります。だから、私はそこでオブジェクトをピギーバックすることになりresourceTagsました:
、およびresourceTagsのパッケージ定義の追加のプロパティに注意してください。私は物事を「シンプル」に保ち、1 つの一般的なオブジェクトを使用して 3 つのケースすべてを処理しました。これは、すぐに説明するを除いて、かなり標準的な設定です。wirewhenmeldgeneralResourceTagsresourceTagsisGivingTroubleButUnused
https://github.com/cujojs/when/wiki/Using-with-Dojoで明示的に言及されているソリューションを試してみましたがwhen、うまくいきませんでした。
このようにして、dojo ビルダーからかなり適切なレポートを取得できますが、不足しているリソースについて言及されています。たとえば、一部のモジュールには jquery が必要です。ただし、これらのモジュールはこのプロジェクトでは使用されません。
Wirejs および dojo using the dojo build systemで言及されているソリューション、ピギーバッキングのpackageJson方が優れている可能性があることに注意してください。私はそれをテストしていません。
isGivingTroubleButUnusedとにかく使用しないため、これらのモジュールを処理せずにコピーするために を導入することになりました。問題の 1 つは にあることに注意してくださいwhen/generator。Closure コンパイラはそこで構文エラーを検出します ( https://github.com/cujojs/when/issues/429を参照)。
このセットアップの最終的な結果は、エラーのないビルドです。
そして、これをテストしたいのですが...失敗します。最初に表示されるエラーは、確かに dojo ローダーが for をスローしたundefinedModule Errorことです"./lib/context"。これが実際に発生する唯一の場所は、 の 23 行目ですwire/wire.js。
これは に解決されることを意図してwire/lib/context.jsおり、明らかにこれは開発 (アンビルド) モードで機能します。
いずれにせよ、requireモジュール参照は相対的であるため、コンテキスト依存の require (dojotoolkit.org /documentation/tutorials/1.10/modules_advanced/、「条件付きで必要なモジュール」を参照) を意図しています。しかし、それがアンビルドで動作し、ビルドで動作しない理由にはなりません。
次に、すべてのwire,whenおよびmeldリソースをコピーしようとしました。レイヤーの Dojo ビルドにリソースが含まれていない場合は、非同期ロードにフォールバックします。したがって、これはうまくいく可能性があります:
ビルドが成功し、必要なものがコピーされます。もちろん、アプリのコードが参照する場所にはさらに多くのエラーがありますが、wireそれは予想されることです ( error(311) Missing dependency. module: MY_MODULE; dependency: wire!SOME_PACKAGE/_wire-serverRequests)。
それでも、ブラウザは同じ場所で同じエラーを出します: undefinedModule Errorfor "./lib/context".
この時点での作業仮説はwire、名前の下でによって使用される関数requireは、ビルド バージョンでは状況依存の require ではなく、アンビルド バージョンでは要求されるというものです。
本当じゃない。まず、wireコードまたはテストを読み取りに変更しました
参照を絶対にする。同じ問題。
次に、sourceMaps ( useSourceMaps = true) を使用してデバッグを試みました。これは悪夢だrequire。
多分「プリロード」は機能しますか?そのため、トップの HTML ページでは、すべてのコードを
contextこれにより、他の処理を行う前に確実にロードされます。同じエラー。
次に、コードにログを追加しましたwire/lib/context
(errorビルドで他のメッセージが取り除かれるため、 を使用)。
アンビルド バージョンでは、すべてのメッセージが表示されます。ビルド版では、エラーが発生する前に「Defining context」しか表示されません。したがって、問題は "loading"wire/lib/contextではなく、それを定義することであり、おそらくロードまたは定義することwhenです!
だから、私は同じトリックに適用しましたwhen
アンビルド版には驚きがあります。出力は次のとおりです。
これは、定義が定義の前にwhen開始されたことを意味します。行の前に、で必要なローダーを伝えることができるコードが表示されないため、これは奇妙です contextwhencontext
これは、「コンテキストの定義」のロギングの後に実行されます。
ビルドバージョンでは、まだ取得できるのは
エラーになる前に!この動作は明らかに異なります。
次に、プリロード コードを削除しました。アンビルド コードでは同じ出力が得られますが、ビルド コードではエラーが発生する前にメッセージが表示されなくなりました。
したがって、いずれにせよ、このwireコードは、読み込み中に予期せず理解できないことを行っています。
この余分な詳細が、誰かが私たちを正しい軌道に乗せるきっかけになることを願っています...
javascript - transports-js と most.js を使用して、Json からストリームへのパイプラインを作成する
私はこのAmdモジュールを持っています
メイン関数は項目のリストを受け取り、それらを「type」プロパティでグループ化します。その後、 < li > 要素を作成して追加します。最後に、クリックのストリームを作成します。私はリアクティブプログラミングとトランスデューサーの初心者です。
しかし、パイプラインを作成する方法があるかどうか疑問に思っていました。
groupby はリダクションでトランスデューサで合成できないので困っています。私は何かが欠けていると確信しています。ありがとう
javascript - mostjs - カスタム ソースからストリームを作成する
既存のストリーム作成方法 ( https://github.com/cujojs/most/blob/master/docs/api.md )に準拠していないソースからストリームを作成するための現在のベスト プラクティスに興味があります。
Firebase の を使用した例ref.on('child_added', function(snap){}):
使えません
.fromEvent… ref は何らかの を実装していますonが、EventEmitter インターフェイス (addEventListener、removeEventListener) に準拠していないようです。
手動でイベントを発行することは、現時点で私が考えることができる最高のものです...
Rx のようにカスタム ストリームを作成する同様のメカニズムはありますか?
私が見逃しているより良い方法はありますか?
javascript - メソッドが実行された後にメソッドを追加できますか?
クラスがあると考えてください
meld js と呼ばれるこのライブラリを使用してメソッドが呼び出された後、いくつかのメッセージを追加する必要があります ( https://github.com/cujojs/meld/blob/master/docs/api.md#meldafter )
私の試み
これは正しいアプローチですか?