問題タブ [commonjs]
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.
javascript - Titanium アプリの Namespacing よりも CommonJS の方が優れている?
Appcelerator は、Titanium アプリでの CommonJS モジュールの使用を推奨しています: https://wiki.appcelerator.org/display/guides/Mobile+Best+Practices
しかし、彼らのドキュメントでは、私の合理的な質問に対する合理的な答えを見つけることができません:なぜですか?
CommonJS は何を行い、良い名前空間は行いませんか? 私が見る限り、これは単にモジュールをインクルードする方法です!
編集: 具体的には、Titanium のコンテキストで CommonJS を使用することで得られる利点は何ですか?
javascript - NodeJS モジュールの構造化 - 変数とメソッド
NodeJS アプリケーションを構築するためのモジュールを作成したいのですが、少し道に迷っており、この件に関して完全に決定的なものは (何時間もの検索で) 見つかりませんでした。
「ユーザー」モジュールを作成したいとします。このモジュールから、次のようなコードを使用して新しいユーザーを作成できます。
理想的には、次のようなものを使用して、コードの先頭にモジュールが必要です。
これはうまくいきます。問題は、ユーザー モジュールをどのように構成すればよいかということです。次の方法が最善ですか?
さまざまなモジュール変数のゲッターとセッターを作成して、他のコードから誤ってアクセスしたくないものを非表示にできるようにしています。ただし、以前は次のようにしました。
これも機能しますが、注意点が 1 つあります。クロージャー内からユーザー プロパティにアクセスする方法が見つかりません。私の理解が正しければ、2番目の実装ではできません。これは、ユーザーのプロパティを編集するために関数をコールバックとして db ライブラリに渡す必要がある場合、それができないことを意味します。それは次のようになります。
私の理解では、「this」キーワードはユーザーではなくクロージャーのスコープ内にあるため、コードは機能しません。コードが User 関数内に配置されたとしても、次のようになります。
それはうまくいきません。
私の質問は、この問題の最善の解決策は何ですか? 最初のコード ブロックで提示した方法ですか? それはかなり面倒で厄介で、変数の衝突が発生しやすいようです。怖いです。
前もって感謝します!
node.js - 「エラー: モジュール 'less' が見つかりません」 Node.js モジュールの読み込み設定/注文/キャッシュ?
状況は次のとおりです… そこで、いくつかの Node.js テンプレート エンジンShift.jsへのインターフェイスとして機能する Node.js モジュールを作成しました。これは、別の Node.js モジュールであるDesign.ioに含まれています (Design.io の package.jsondependencies
ブロックに指定されています)。Design.io はファイルの変更を監視します。
次に、アプリとrequire('design.io')
. たとえば、Less と Stylus もプロジェクトにインストールします。
このようにして、.less
または.styl
ファイルを保存すると、一連のメソッドが呼び出されます。
require("design.io")
ファイルシステム イベントの通知を受け取ります。次に Design.io が呼び出しますrequire('shift').render(string, extension, callback)
. 次に、Shift.js が呼び出しますrequire(moduleFor(extension)) # require("less")
. 文字列がコンパイルされます。
アプリ (現在の作業ディレクトリ) に、less とスタイラスをインストールしました。
私が抱えている問題は、Shift.js モジュール内から呼び出されるステップ 3で、次のようなエラーが発生することです。
私の質問は、なぜこれが起こっているのですか?ライブラリがどこかにインストールされている限り、モジュールからライブラリを動的に要求できると思いました...何が欠けていますか?
目標は、Shift.js のようなライブラリがすべての単一の依存関係を定義する必要がないことpackage.json
です...「テンプレート エンジンへのインターフェイス」ライブラリの場合、アプリがおそらく決して使用しない依存関係が多すぎる必要があります。
助けてくれてありがとう、それが幾分明確だったことを願っています。
javascript - Node.JS - モジュールでのプロトタイプの使用
だから私はノードにベンダー固有のファイルをたくさん書いていますが、それらはすべて同様のコントローラーパターンを持っているので、それらを切り取って共通ファイルに入れるのは理にかなっています。
ここで私の共通コントローラーファイルを見ることができます: https://gist.github.com/081a04073656bf28f46b
複数のモジュールでそれらを使用すると、連続してロードされた各モジュールが最初のモジュールを上書きします。これは、ファイルが一度だけ必要とされ、ロード時に各モジュールに動的に渡されるためです (これにより、モジュールを追加することができ、これらのモジュールは独自のルートを追加できます)。ここでモジュールの例を見ることができます: https://gist.github.com/2382bf93298e0fc58599
53 行目で、毎回別のインスタンスを作成する必要があることに気付いたので、standardControllers オブジェクトを新しいオブジェクトにコピーし、新しいオブジェクトを初期化して、新しいインスタンスを作成しようとしました。これはコードにまったく影響を与えず、コードはまったく同じように動作します。
アイデアはありますか?私はこれで少し詰まっています!
javascript - CommonJS を使用したチタン プロジェクト構造を推奨してください
新しい Titanium アプリを開始していますが、ベスト プラクティスを使用して、最初からメモリ リークを回避したいと考えています。私は、CommonJS だけでなく、Titanium プラットフォーム全般も初めて使用します。
残念ながら、チタン サラウンドのすべてのサンプル アプリケーションは、新しい推奨ベスト プラクティスのTi.include("/lib/module")
代わりにオンになっているようです。require("/lib/module")
私が心配しているのは、CommonJS を使用する際のメモリ消費量です。CommonJS Modules in Titaniumのドキュメントでは、モジュールがキャッシュされると記載されていますが、これは、モジュールにアクセスすると、それらの関数が範囲外になっても突然メモリ内に留まるということではないでしょうか?
次の構造の新しいアプリを開始しました
ここから、私のメイン アプリには、次のように大まかに構成された単一のダッシュボード スタイル ビューがあります。
正しいプロジェクト構造に関するガイダンスは大歓迎です。
javascript - TitaniummobileのCommonjsリソースパス
次のフォルダ構造のプロジェクトがあります
MainView.jsはcommonjsの方法で書いています
これらのコードはiOSで正確に機能しますが、Androidでは同じストーリーではありません。高解像度のデバイスで期待していましたが、android / images / res-hdpi / main.pngが画像として読み込まれますが、パスが見つかりませんと表示され続けます。
TitaniumSDK1.8.2を使用しています
javascript - 「this」オブジェクトがすでに初期化されている場合、疑似 JavaScript クラス内から「この」オブジェクトを変更しようとすると、多くの問題が発生します
この投稿の一番下までスクロールして、回避策/可能な解決策を確認してください。
これは、ソース コードでコメントを付けて説明した方が簡単かもしれません。当面の問題は、実行しようとしているタスクを実行するために疑似クラスがどのように連携するかを理解できないことです (以下のコードで説明されています)。
コードは、lead.js、router.js、および db.js の 3 つのファイルに分割されます。
かなりの量のコード行がありますが、そのほとんどはコメントです。
これを実行すると、バリデーターは常にパスワードが空であると報告しますが、これは理にかなっています。最初に空のパスワードを使用してドキュメントをクラスに送信しています (パスワードはランダムに生成され、フォーム フィールドではありません)。問題は、if (!document) ... コード ブロックをどう処理すればよいかわかりません。 this.document を実際に適切に設定します。
コメントとコードの間で、私が何をしようとしているのかを理解していただければ幸いです。私はしばらくこれにこだわっています。
編集
解決策を得るために、その流れを少し変更しました。
db.js では、リード (および将来のモデル) を直接インスタンス化するのではなく、接続をエクスポートしました。
router.js ファイルでは、db と Lead ファイルを要求し、Lead のコンストラクターで db 接続とドキュメントの両方を渡します。元。
lead.js ファイルでは、this.document = document (db と同じ) を実行するだけで簡単になります。新しいリードを送信すると、router.js から送信していない値 (作成日、ランダムなパスワードなど) がドキュメントに追加され、すべて問題ありません。
これはこれを処理する適切な方法ですか、それともこれをリファクタリングするためのより良い方法はありますか?
javascript - エクスポートオブジェクトをCommonJSの関数にしても大丈夫ですか?
CommonJSモジュールが1つの関数を返すだけでよい場合、それをexportsオブジェクトに直接割り当てるのは良い習慣ですか?(エクスポートオブジェクトの唯一の属性として割り当てるのとは対照的に)
例(架空のlog.js
モジュール):
利用方法:
javascript - 3 つのファイルに分割された WebGL コードを 1 つのブートストラップ ファイルに「要求」するにはどうすればよいですか?
私はいくつかの WebGL コードを書きましたが、実際にはここにある例で遊んでいます。とにかく、3 つの別個の疑似クラスを作成することにしました。ここでは、スペースを確保するためにそのうちの 1 つだけを示します。他のクラスは質問に関連しているとは思わないためです。
したがって、すべてをブートストラップする別のファイルにそれらを含める(要求する)ことができる最良の方法は何かを知りたいです。CommonJS について読みましたが、これはサーバー側であり、ここではクライアント側について話しています。私がやろうとしていることは、最終的にはアプリケーションとして非常に大きくなり、すべてを 1 か所にまとめたくないので、すべてを 1 つのファイルに保持する必要はありません。前もって感謝します!