[解決済み] Node.jsに "Vanilla "Javascriptライブラリを読み込む
質問
Node.jsサーバーで使いたい機能を持ったサードパーティのJavascriptライブラリがいくつかあります。(具体的には、私が見つけたQuadTree javascriptライブラリを使用したいです。) しかし、これらのライブラリは、単にまっすぐな
.js
ファイルであり、"Node.js ライブラリ" ではありません。
そのため、これらのライブラリは
exports.var_name
の構文に従いません。私が理解する限り、それはつまり、あなたが
module = require('module_name');
または
module = require('./path/to/file.js');
を使用すると、一般にアクセス可能な関数などを持たないモジュールになってしまいます。
私の質問は、「どのようにして任意のjavascriptファイルをNode.jsにロードし、その機能を利用することができるのか」ということです。
exports
というように書き直す必要はありません。
私はNode.jsに非常に慣れていないので、私の理解の中に目立った穴があれば教えてください。
EDIT : もっと調べてみると、Node.jsが使っているモジュール読み込みパターンは、実は最近開発されたJavascriptライブラリを読み込むための標準の一部で CommonJS . これは モジュールのドキュメントページ に書いてあるのですが、今まで見逃していました。
私の質問に対する答えは、quot;ライブラリの作者がCommonJSインターフェースを書くまで待つか、自分でやるか、ということになりそうです。
どのように解決するのですか?
を使うよりもずっと良い方法があります。
eval
を使うよりもはるかに良い方法があります。
vm
モジュールになります。
例えば、以下は私の
execfile
モジュールで、このスクリプトは
path
のどちらかで評価されます。
context
またはグローバルコンテキストのどちらかです。
var vm = require("vm");
var fs = require("fs");
module.exports = function(path, context) {
context = context || {};
var data = fs.readFileSync(path);
vm.runInNewContext(data, context, path);
return context;
}
そして、このように使うことができます。
> var execfile = require("execfile");
> // `someGlobal` will be a global variable while the script runs
> var context = execfile("example.js", { someGlobal: 42 });
> // And `getSomeGlobal` defined in the script is available on `context`:
> context.getSomeGlobal()
42
> context.someGlobal = 16
> context.getSomeGlobal()
16
ここで
example.js
が含まれる。
function getSomeGlobal() {
return someGlobal;
}
この方法の大きな利点は、実行されるスクリプトのグローバル変数を完全に制御できることです。
context
を通して)カスタム・グローバルを渡すことができ、スクリプトによって作成されたすべてのグローバルは
context
. また、構文エラーなどが正しいファイル名で報告されるため、デバッグも容易になります。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]