如何创建一个带有附加到对象的方法的 npm 包?
How to create a npm package with a method attached to the object?
我正在尝试创建一个 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 并使用 import/export 和 类 吗?
您可以在具有 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());
可以改进事物的命名
您似乎在寻找
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];
}
虽然直接在模块接口上公开集合可能比使用字符串引用它们更好。顺便说一句,在 ES6 中你应该能够将上面的内容简化为
import * as collections from './data';
我正在尝试创建一个 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 并使用 import/export 和 类 吗?
您可以在具有 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());
可以改进事物的命名
您似乎在寻找
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];
}
虽然直接在模块接口上公开集合可能比使用字符串引用它们更好。顺便说一句,在 ES6 中你应该能够将上面的内容简化为
import * as collections from './data';