<!-- 譯者:Github@wizardforcel -->
# 通過服務和其它包交互 #
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
```
與之相似,指定一個或多個[版本范圍](https://docs.npmjs.com/misc/semver#ranges)來使用一個服務,每個都帶有一個包的主模塊中的方法。
```
{
"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)
```