在一个带有范围的GitHub仓库中有多个NPM回购?

时间:2017-08-29 20:41:59

标签: node.js git github npm

我们说我有一个客户端awesome-service,它由不同类型的服务组成,http-servicelog-service等等。

我希望可以选择包含每个服务(和特定版本),或者只需要所有awesome-services,所以实际上我需要这样的内容:

const awesomeService = require('@awesome-service'); 
// Now awesomeService has
// awesomeService.httpService;
// awesomeService.logService;
// etc

// or individually
const httpService = require('@awesome-service/http-service');

这可能吗? package.json和GitHub组织会是什么样子?也许这是package.json?

"dependencies": {
   "awesome-service": "@awesome-service"
   // OR if individually importing them
   "http-service": "@awesome-service/http-service#1.0.0"
}

如何实现,或者更确切地说,这可以实现?

1 个答案:

答案 0 :(得分:0)

  

这可能吗?

是的,这是可能的。

  

package.json和GitHub组织会是什么样子?

包应具有以下结构:

- awesome-service
  - index.js       // main module
  - package.json   // package.json of the main package
  - http-service
    - index.js     // implementation of `http` service
    - package.json // package.json of `http` package
  - log-service
    - index.js     // implementation of `log` service
    - package.json // package.json of `log` package

如您所见,有三个package.json个文件。根用于主包,其他用于每个服务。

在每个package.json中,将main字段设置为index.js并为每个包设置正确的名称:

{
  "name": "awesome-service",
  "main": "index.js",
  ...
}

{
  "name": "awesome-service@http-service",
  "main": "index.js",
  ...
}

{
  "name": "awesome-service@log-service",
  "main": "index.js",
  ...
}

在根包的index.js中导出带有字段的对象 - 必需的服务(我没有在需要时指定index.js,因为默认情况下将加载此模块):

module.exports = {
  httpService: require('./http-service'),
  logService: require('./log-service')
};

要分别使用这三个包,你应该在npm中添加所有这些包,或者使用带有正确URL的github:

"dependencies": {
   "awesome-service": "awesome-service"
   "http-service": "awesome-service@http-service#1.0.0",
   "log-service": "git+https://github.com/yourAccount/awesome-service/log-service.git"
}