2016-12-11 21 views
0

は、次のように必要になることができます。メソッドにオブジェクトを添付してnpmパッケージを作成するには?私はそれのNPMパッケージを作成しようとしています

var Greeks = require('greek-mythology-data'); 
var gods = new Greeks('gods'); 
gods.sortByName(); 

が、私はこのような何かをするだけで管理している:

var Greeks = require('greek-mythology-data'); 
var gods = require('greek-mythology-data/data/gods.json'); 
gods = new Greeks(gods); 
console.log(gods.sortByName()); 

これまでのところ、私はこの

を持っています
var all = require('./data/greeks.json'); 
var demigods = require('./data/demigods.json'); 
var generalDeities = require('./data/general-deities.json'); 
var giants = require('./data/giants.json'); 
var gods = require('./data/gods.json'); 
var kings = require('./data/kings.json'); 
var primordialDeities = require('./data/general-deities.json'); 
var seaDeities = require('./data/sea-deities.json'); 
var titans = require('./data/titans.json'); 

function Greeks(collection) { 
    this.collection = collection; 

/* return { 
    all: all, 
    demigods: demigods, 
    generalDeities: generalDeities, 
    giants: giants, 
    gods: gods, 
    kings: kings, 
    primordialDeities: primordialDeities, 
    seaDeities: seaDeities, 
    titans: titans, 
    }*/ 
} 

Greeks.prototype.sortByName = function() { 
    var compare = function(a, b) { 
    if (a.name < b.name) 
     return -1; 
    if (a.name > b.name) 
     return 1; 
    return 0; 
    }; 

    return this.collection.sort(compare); 
}; 

module.exports = Greeks; 

私が今解決しているソリューションは非常に便利だとは思いません。

私は正しいアプローチをとっていますか?

互換性のためにes5にも書きましたが、ES6/ES2015に移動してインポート/エクスポートとクラスを使用する必要がありますか?

+0

本当にあなたが何を求めているのかは分かりません。あなたが望むことを実行する実用的なソリューションを既に持っているようです。 – jfriend00

+0

私の解決策では、インポートステートメントを複製する必要があります –

+1

'this.collection = require( './ data /' + collection + '。json');' 'collection'を文字列 – Bergi

答えて

2

あなたはGreeks機能を持っていますが、同じファイルに同じような構文module.exportsを使用することができます。さらすことが

module.exports = { 
    Greeks, 
    gods, 
    kings 
    // ... all other objects 
} 

そして、あなたにはこのようにそれを使用するものの命名を向上させることができる

var GreekMyth = require('greek-mythology-data'); 
var gods = new GreekMyth.Greeks(GreekMyth.gods); 
console.log(gods.sortByName()); 

メインファイルは

+0

ありがとう!私はこれを試すことができる:) –

2

あなたは

const collections = { 
    all: all, 
    demigods: demigods, 
    generalDeities: generalDeities, 
    giants: giants, 
    gods: gods, 
    kings: kings, 
    primordialDeities: primordialDeities, 
    seaDeities: seaDeities, 
    titans: titans, 
}; 
function Greeks(name) { 
    this.collection = collections[name]; 
} 

を探しているように見えますあなたのモジュールインターフェイス上のコレクションは、strinでそれらを参照するよりも良いアイデアかもしれませんgs。 Btw、ES6では上記を簡略化することができるはずです

import * as collections from './data'; 
+0

私はあなたの助言に従って、コレクションを公開します。私がes6を使っているのであれば、バーベルの「クライアント」だけがコンパイルできますよね? –

+0

また、ES5/CommonJSに移行して、それを公開することもできます – Bergi

関連する問題