• 通过服务和其它包交互

    通过服务和其它包交互

    Atom包可以通过叫做服务的带有版本控制的APi,和其它包进行交互。在你的package.json文件中指定一个或者多个版本号来提供服务,每个版本号都要带有一个包的主模块中的方法。

    1. {
    2. "providedServices": {
    3. "my-service": {
    4. "description": "Does a useful thing",
    5. "versions": {
    6. "1.2.3": "provideMyServiceV1",
    7. "2.3.4": "provideMyServiceV2",
    8. }
    9. }
    10. }
    11. }

    在你的包的主模块中实现上面的方法。这些方法会在一个包被激活的任何时候调用,它们会使用它们的通信服务。它们应该返回实现了服务API的一个值。

    1. module.exports =
    2. activate: -> # ...
    3. provideMyServiceV1: ->
    4. adaptToLegacyAPI(myService)
    5. provideMyServiceV2: ->
    6. myService

    与之相似,指定一个或多个版本范围来使用一个服务,每个都带有一个包的主模块中的方法。

    1. {
    2. "consumedServices": {
    3. "another-service": {
    4. "versions": {
    5. "^1.2.3": "consumeAnotherServiceV1",
    6. ">=2.3.4 <2.5": "consumeAnotherServiceV2",
    7. }
    8. }
    9. }
    10. }

    这些方法会在一个包被激活的任何时候调用,它们会提供它们的通信服务。它们会接受到一个通信对象作为一个参数。你通常需要在包提供的服务失效的时间中,进行同种类型的清除工作。从你使用服务的方法中返回一个Disposable来完成它:

    1. {Disposable} = require 'atom'
    2. module.exports =
    3. activate: -> # ...
    4. consumeAnotherServiceV1: (service) ->
    5. useService(adaptServiceFromLegacyAPI(service))
    6. new Disposable -> stopUsingService(service)
    7. consumeAnotherServiceV2: (service) ->
    8. useService(service)
    9. new Disposable -> stopUsingService(service)