如何使用ES6模块建立插件生态系统?

时间:2017-10-29 07:26:30

标签: es6-modules

我想发布一个JS库,让任何人都可以为这个库开发插件。 例如,这是我发布的库:

// awesome-lib.js
export class Library {
  registerPlugin(plugin) {
    ...
  }
}

export class PluginBase {
  ...
}

其他开发者实施的插件:

// third-party-plugin.js
import {PluginBase} from './awesome-lib';
export default MyPlugin extends PluginBase {
  ...                                                                                                              
}

最终用户的代码是这样的:

import {Library} from './awesome-lib';
import MyPlugin from './third-party-plugin';

const lib = new Library();
lib.registerPlugin(new MyPlugin());

但是,最终用户需要在同一目录中部署awesome-lib.jsthird-party-plugin,因为后者从{{1}导入PluginBase在同一目录中。

在Node.js中,这种插件很容易,因为它的模块发现是由npm管理的。但是在浏览器中,事情变得困难,因为它的模块发现只依赖于相对/绝对路径。

有没有解决方案?

0 个答案:

没有答案