6

ノードで変数を使用するglobalことはお勧めできませんが、データをグローバルに保存する必要があると仮定すると、これはより悪いアプローチです。

  1. グローバルを使用

  2. オブジェクトを保存するためにrequireキャッシュを直接使用する。

    require.cache["myGlobalVar"] == {};

require cacheはモジュールに使用することを目的としているため、オプション2の方が悪いと思います。

詳細:require( "myLibrary")。myGlobalVarを使用することを考えましたが、myLibraryを呼び出すすべてのファイルにアクセスできるようにする必要があり、実際には不可能な場合があります。私はコードカバレッジツールを作成しているので、ユーザーがdev / testモジュールに「myLibrary」をインストールすることを期待できますが、インストルメントされたコードファイルが参照するsrcnode_modulesディレクトリにインストールする必要はありません。

4

3 に答える 3

14

他のすべてのコードが参照できるメモリ内キャッシュを作成してみませんか?

var memoryCache = module.exports = function () {
    var cache = {};
    return {
        get: function (key) { return cache[key]; },
        set: function (key, val) { cache[key] = val; }
    }
}

その後、キャッシュをrequireすることで、どこからでもキャッシュを使用できます。

var cache = require('../cache/memoryCache')();
cache.set('1234', 'value I want to share');
cache.get('1234');  // 'value I want to share'
于 2012-10-18T16:00:09.043 に答える
11

Bill からの回答は、実際には「require することでどこからでも」使用できないため、うまくいきませんでした。これは、require ごとに呼び出される関数をエクスポートしているため、毎回空白の新しい (空の) キャッシュが作成されるためです。

ソリューションは関数のインスタンスをエクスポートしています...

// cache/memoryCache.js
module.exports = function () {
    var cache = {};
    return {
        get: function (key) { return cache[key]; },
        set: function (key, val) { cache[key] = val; }
    }
}();

...そして、そのインスタンスを毎回要求します。

// some other file
var cache = require('../cache/memoryCache');
cache.set('1234', 'value I want to share');
cache.get('1234');  // 'value I want to share'

(違いに注意してください: 括弧 "()" のペアは、require の後ではなく、モジュール内の関数定義の最後にあります。)

于 2016-11-03T22:01:18.387 に答える
0

キャッシュファイルが必要になるたびに、関数が再度トリガーされ、キャッシュオブジェクトが再度初期化されます。

var cache = {}

これを解決するために、以下のようにキャッシュを実装できます。

//cache.js
module.exports = {
    cache: {},
    get: function (key) { return this.cache[key]; },
    set: function (key, val) { this.cache[key] = val; },
    dumpCache: function () { return this.cache } // this just for testing purpose
}
// index.js

var cache = require('./cache');

cache.set('12', 'Hey');
console.log(cache.get('12'));
console.log(cache.dumpCache());

于 2019-05-06T05:12:39.800 に答える