Skip to content

Instantly share code, notes, and snippets.

@qiulang
Created March 13, 2018 05:32
Show Gist options
  • Save qiulang/c4f4935b475d248d2d13177cedb70e2b to your computer and use it in GitHub Desktop.
Save qiulang/c4f4935b475d248d2d13177cedb70e2b to your computer and use it in GitHub Desktop.
如何维护私有npm module并方便安装
  1. 首先一个repo维护所有我们自己做了修改了npm 包

  2. 目前只有几个包,比如per-env, 因为per-env在window下有个很土bug,造成跑不起来

    1. per-env是个很值得研究包,首先它是一个可执行程序,我们只是运行它,而不是在代码引用它。所以所有人都要全局安装它 npm -i -g ,有了它可以方便在运行时候配置各种环境变量。
    2. 我们node程序都要npm启动,而不要用node启动,因为有很多环境变量要配置。关于node读取环境变量问题,有兴趣可以查看这个SO讨论,以及 The 12 factor
    3. node包如何变成一个可执行程序,参见 https://docs.npmjs.com/files/package.json#bin,#!/usr/bin/env node 放在代码第一行
    4. 总之per-env源代码一定要读
    5. git-directory-deploy 是另一个维护包,我们暂时不会改代码,只是要精读它的代码(参见下面描述)
  3. 一个repo维护多个包带来问题就是如何安装? npm本身支持从私有仓库安装包,但它要求一个仓库对应一个包 https://docs.npmjs.com/files/package.json#urls-as-dependencies

  4. 安装一个repo子目录下包是常见需求, 但是...

    1. npm开发者基本不同意这么做
    2. yarn正在考虑中
  5. 我们能想到两个办法:

    1. 使用git subtree, 每个包是一个独立repo,再用subtree在一个主repo管理所有子repo. 但是维护成本较高
    2. 目前采用讨巧做法,使用git-directory-deploy 它的作用是为子目录创建一个单独branch
  6. 如何使用 git-directory-deploy (首先要全局安装它)

    1. 比如对per-env这个子目录,我们运行 git-directory-deploy --directory per-env --branch per-env 创建一个 per-env的分支(之后可以再加tag)
    2. 别的项目要安装这个包就运行 npm i -S git+ssh://git@www.mydomain/path/node_modules.git#4547c6e 或者 npm i -S git+ssh://git@www.mydomain/path/node_modules.git#v1.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment