ramasilveyra / gitpkg

Publish packages as git tags
MIT License
274 stars 27 forks source link

semver ranges and "gitpkg:^1.0.0" dep definition sugar #6

Open ramasilveyra opened 7 years ago

ramasilveyra commented 7 years ago

idea/discussion: just thinking aloud, comment whatever you think that could be wrong or could be improved.

Long git tags are awful:

{
  "dependencies": {
    "some-package": "github:ramasilveyra/private-registry#some-package-v1.0.0-gitpkg"
  }
}

maybe instead we could use the gitpkg: shortcut that infers the gitpkg registry from the field gitpkg.registry:

{
  "dependencies": {
    "some-package": "gitpkg:^1.0.0"
  },
  "gitpkg": {
    "registry": "git@github.com:ramasilveyra/private-registry.git"
  }
}

even we could have multiples gitpkg registries:

{
  "dependencies": {
    "some-package": "gitpkg:private:^1.0.0",
    "other-package": "gitpkg:public:^1.0.0"
  },
  "gitpkg": {
    "registries": {
      "private": "git@github.com:ramasilveyra/private-registry.git",
      "public": "git@github.com:ramasilveyra/public-registry.git"
    }
  }
}

For semver ranges if we can make the git tag name to be the same of the package even for scoped packages (see https://github.com/ramasilveyra/gitpkg/issues/4) the work on the npm client will be:

  1. List git tags using ls-remote.
  2. Select the correct version.
  3. Fetch.
ramasilveyra commented 6 years ago

We can use the npm scripts preinstall and postinstall to transform the custom gitpkg semver syntax to git deps syntax. Eg: gitpkg:private:^1.0.0 => git@github.com:ramasilveyra/private-registry.git#some-package-v1.5.0-gitpkg