Добрый день!
1) Для удобства оформите библиотеку как
npm пакет.
И что бы этот пакет можно было использовать разными системами сборки, можно использовать формат определения модуля
UMD
2) При создании экземпляра
const gallery = new Gallery({})
- неплохо бы иметь доступ к управлению галереей через JS, например:
gallery.pause();
gallery.next();
Возможно вам захочется добавлять слайды на лету, это тоже отдельный метод.
3) Так же, можно добавить изменение настроек на лету,
gallery.setOptions({})
В связи с этим можно сделать вывод, что нужен более объекто-ориентированный код, то есть вы создаете класс Gallery, который имеет методы для управления, сохраняет свойства себе в контекст (this), например:
var defaultOptions = {
...
}
privateMethod() {
...
}
function Gallery(options) {
this.options = extend(defaultOptions, options);
this.interval = this.createInterval();
...
}
Gallery.prototype.init = function() {
...
}
Gallery.prototype.next = function() {
...
}
Gallery.prototype.createInterval= function() {
...
}
function extend(a, b) {
...
}
То есть, всю логику вы разделяете на отдельные функции, которые являются методами класса Gallery, если нужен публичный доступ к этой логике, либо выносите эти методы и свойства наружу, если их нельзя менять пользователям.