创建跨平台 javascript 库

Creating a cross platform javascript library

我目前正在开发一个库,它针对不同的 javascript 运行 时间环境(即节点、现代浏览器)。因此我有一个 npm 项目,用 babel 编写 ES6 代码,将它转换为节点中的 运行 并执行测试。

现在我遇到了必须为不同的目标平台编写模块的情况,例如我需要使用网络音频 Api(节点不支持)来生成一些声音。我的想法是创建一个模块(例如 sound.js),无论针对哪个目标平台,它都提供统一的接口,但具有与 运行 时间环境相对应的依赖项。此外,由于依赖性不同,我必须在 sound.js 内提供不同的实现,据我所知,这称为匀场(或适配器模式)。下图说明了我对这个过程如何运作的想法:

-- src
  -- modules
    -- sound.js
       ...
  -- node_modules
       -- webAudio
       -- nodeAudio

里面sound.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/ 包。但是我没有找到任何关于如何实现 sound.js 垫片的资源。所以...

上述概念是否是构建跨平台库的可行方法?如果不是,我在哪里可以找到与此场景相关的资源?

TL;DW 我最终使用了这个奇妙 blog post 中提到的不同方法。

主要是 browserify 以消除依赖关系并添加各种用于测试和 linting 的 grunt 任务。