创建一个跨平台的JavaScript库

时间:2020-03-05 14:38:25

标签: javascript webpack cross-platform babeljs shim

我目前在一个库中工作,该库针对不同的javascript运行时环境(即节点,现代浏览器)。因此,我有一个npm项目,与babel一起编写ES6代码,将其转换为在节点中运行并执行测试。

现在我遇到了必须针对不同目标平台编写模块的情况,例如我需要使用Web Audio 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垫片的资源。所以...

这个概念是否是构建跨平台库的可行方法,如果没有,我在哪里可以找到有关此场景的资源?

1 个答案:

答案 0 :(得分:0)

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

主要是通过浏览器化来消除依赖关系,并添加各种繁重的任务来进行测试和整理。