企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
<!-- 译者: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) ```