В настоящее время я работаю над библиотекой, которая ориентирована на различные среды выполнения javascript (а именно на узлы, современные браузеры). Поэтому у меня есть проект npm, с babel для написания кода ES6, транспорта для его запуска в узле и выполнения тестов.
Теперь я сталкиваюсь с ситуациями, когда модули должны быть написаны для разных целевых платформ, например, мне нужно использовать Web Audio Api (который не поддерживается в узле) для генерации некоторых звуков. Моя идея состоит в том, чтобы создать модуль (например, звук. js), который обеспечивает единый интерфейс, независимо от того, для какой целевой платформы, но имеет зависимости, соответствующие среде выполнения. Кроме того, с разными зависимостями я должен предоставить разные реализации внутри звука. js, как я понимаю, это называется шиммингом (или шаблоном адаптера). Рисунок ниже иллюстрирует мою идею о том, как работает этот процесс:
-- src
-- modules
-- sound.js
...
-- node_modules
-- webAudio
-- nodeAudio
Внутренний звук. js
...
// if target == web
import * from 'webAudio'
// if target == node
import * from 'nodeAudio'
...
function playSound() {
//if platform == 'node'
nodeAudio.play()
//if platform == 'browser'
webAudio.play()
}
На данный момент я просто потрясен миром креста разработка платформы во вселенной JavaScript. Насколько я понимаю, я бы добавил webpack в babel и собирал разные dist / пакеты для каждой платформы. Но я не нахожу никаких ресурсов о том, как подходить к реализации звука. js Шим. Итак ...
Является ли эта концепция выше жизнеспособного подхода к созданию кроссплатформенной библиотеки, и если нет, где я могу найти ресурсы по этому сценарию?