- 通过服务和其它包交互
通过服务和其它包交互
Atom包可以通过叫做服务的带有版本控制的APi,和其它包进行交互。在你的package.json文件中指定一个或者多个版本号来提供服务,每个版本号都要带有一个包的主模块中的方法。
{"providedServices": {"my-service": {"description": "Does a useful thing","versions": {"1.2.3": "provideMyServiceV1","2.3.4": "provideMyServiceV2",}}}}
在你的包的主模块中实现上面的方法。这些方法会在一个包被激活的任何时候调用,它们会使用它们的通信服务。它们应该返回实现了服务API的一个值。
module.exports =activate: -> # ...provideMyServiceV1: ->adaptToLegacyAPI(myService)provideMyServiceV2: ->myService
与之相似,指定一个或多个版本范围来使用一个服务,每个都带有一个包的主模块中的方法。
{"consumedServices": {"another-service": {"versions": {"^1.2.3": "consumeAnotherServiceV1",">=2.3.4 <2.5": "consumeAnotherServiceV2",}}}}
这些方法会在一个包被激活的任何时候调用,它们会提供它们的通信服务。它们会接受到一个通信对象作为一个参数。你通常需要在包提供的服务失效的时间中,进行同种类型的清除工作。从你使用服务的方法中返回一个Disposable来完成它:
{Disposable} = require 'atom'module.exports =activate: -> # ...consumeAnotherServiceV1: (service) ->useService(adaptServiceFromLegacyAPI(service))new Disposable -> stopUsingService(service)consumeAnotherServiceV2: (service) ->useService(service)new Disposable -> stopUsingService(service)
