2020.12.29 更新
发现对于 npm 的配置,官方提供了工具 npmrc
来方便的管理。文档参见 https://docs.npmjs.com/configuring-your-registry-settings-as-an-npm-enterprise-user
也就是在用户目录下维护一个 .npmrcs 的文件夹,把 npmrc 链接到指定的文件而已,比较方便。
周末将公司电脑的系统升级了下,同时测试了下自己的环境恢复脚本。很快恢复了所有必要的软件及之前的软件配置,运行良好。对于个人项目及公司项目而言,在 git 及 npm 的配置上是有所不同的。git 的提交邮箱不同,提交签署的 gpg 密钥不用;而对于 npm,npm 仓库源不同,发布 npm 包的认证信息不同。所以需要找到一种方法来区分。
Docker
将不同的项目配置放入不同的 Docker 环境中,借助现在完善的 VSCode Remote Containers 插件,可以连接进入 Docker 环境进行开发,不同的 git 及 npm 配置可以在 Dockerfile 中配置。这样基本上可以实现整个环境的隔离。
缺点:
- 对所有隔离的项目,都需要进入容器中操作;
- 容器中操作的 IO 性能不够好,运行资源消耗大;
分项目配置
.gitconfig
以及 .npmrc
配置文件,都是按照 项目配置 -> 用户配置 -> 安装配置
的路径来查找的。
对于 npm 还可以在 package.json
中配置 publishConfig":{"registry":"http://my-internal-registry.local"}
来指定发布源。
所以,在每个项目中指定单独的配置文件,就好啦!
好个鬼,每个项目都配置一下不得累死。>_<
最佳方案
对于 git 项目配置来讲,基本上是以文件夹的配置为维度的。所以只要有方法能匹配文件夹路径来读取不同的 git 配置就好了。
答案是肯定的,在 ~/.gitconfig
用户的配置文件中,可以这样配置:
1 | [includeIf "gitdir:~/Code.localized/clickpaas/"] |
我的工作代码都会放在 clickpaas
文件夹,所以该配置的作用是,匹配到 clickpaas
的文件夹,就会采用指定路径的 git 配置文件。在这里,我放在了 Home 目录。配置内容和用户配置 ~/.gitconfig
的配置格式一样,这里不再赘述。
对于 npm 配置,私有 npm 包通常会发布在相应的 @scope
下,发布的是一个个 @scope/a
@scope/b
这样的包名。所以可以根据 @scope
来匹配相应的 npm 配置。
1 | //registry.npmjs.org/:_authToken=xxxx |
上面是一段示例 npm 配置,当匹配到相应 scope 的 npm 包,就会在相应的源中下载,npm publish 的时候也是一样。
可以执行如下命令来登录私有作用域的仓库:
1 | npm login --scope=@company-scope --registry=https://registry.company-registry.npme.io/ |
至此,完成了不同项目中 git 及 npm 的配置分离,而不需要分别对每个仓库进行配置。
配置同步
如果你像我一样,使用 mackup
来同步 mac 的配置,那默认的 git 配置同步不满足需求,无法同步自定义的 git 配置文件。
好在 mackup 支持自定义配置同步选项,新建 ~/.mackup/git.cfg
,内容如下:
1 | [application] |
增加配置文件便可以完成同步。
-EOF-