[英]Different node package versions in different branches of app in package.json?
场景:我们有几个相似但自定义的 Node 应用程序,所有这些应用程序都包含我们自己的公共库/包,我们将其作为依赖项包含在package.json中,所有这些都在 BitBucket 上,都在开发中。
每个应用程序有 3 个分支,'develop', 'staging', 'production'
该库还有 3 个分支,“开发”、“暂存”和“生产”
我们想使用 lib 的“开发”分支来开发我们应用程序的版本,同样用于暂存和生产。
我们可以在 package.json 中使用:
我们的应用开发分支 package.json
"dependencies": {
"ourlib": "git+https://ouruser@bitbucket.org/our-org/ourlib#develop",
"ts-jest": "^27.1.2",
...etc.
}
我们的应用程序暂存分支 package.json:
"dependencies": {
"ourlib": "git+https://ouruser@bitbucket.org/our-org/ourlib#staging",
"ts-jest": "^27.1.2",
...etc.
}
问题/关注点是从 dev->staging->prod 促进/合并 - 以使其万无一失。 当我们对我们的应用程序开发分支感到满意时,我们将其合并到暂存和部署中。
但是当然在合并之后,ourapp staging package.json将被dev package.json 覆盖:
"dependencies": {
"ourlib": "git+https://ouruser@bitbucket.org/our-org/ourlib#develop",
"ts-jest": "^27.1.2",
...etc.
}
...而不是 ourlib 的暂存分支 - 一种解决方案可能是在合并后立即编辑暂存 ourapp package.json 以恢复 lib 的暂存分支 - 但这太笨拙且容易出错。
我想这一定是一个常见的场景,但我们都没有 NPM 的专业知识水平。
我想知道是否有任何方法可以使用 .npmrc 或某处的环境变量或其他任何方式来做到这一点 - 比如:
"dependencies": {
"ourlib": "git+https://ouruser@bitbucket.org/our-org/ourlib#$NODE_ENV"
or
"ourlib": "git+https://ouruser@bitbucket.org/our-org/ourlib#${$npm_package_env}"
or???
}
或者有没有办法在 main 中包含另一个 package.json - 这将是 in.gitignore,例如:
{
"include" : "env.package.json",
...
}
感谢您的任何提示...
我终于想出了如何做我想做的事——在应用程序的不同分支中安装不同版本的库,而不会在合并时覆盖分支特定版本(感谢组装几个不同的线程——感谢所有人。)。
它是 .git 和 npm / package.json 的组合 -
在 package.json 中,在 dependencies 下,而不是 library 或 package 或 repo,使用一个文件依赖:
"versionlib": "file:./versionlib",
创建子目录./versionlib,并在其中创建一个 package.json,其中包含您要在应用程序分支中安装的库的特定分支/版本:
{
"name": "develop-lib-branch",
"version": "0.0.0",
"description": "Installs the develop branch of Library",
"dependencies": {
"mylibrary": "git+https://<credentials>@bitbucket.org/<repo>/mylibrary.git#develop"
}
}
GIT:首先,配置git(本地或全局)以启用合并驱动程序:
git config merge.ours.driver true
然后创建一个 .gitattributes 文件:
mylibrary/package.json merge=ours
为您要加载不同库版本的应用程序的每个分支创建 mylibrary/package.json——在生产中,
{
"name": "prod-lib-branch",
"version": "0.0.0",
"description": "Installs the prod branch of Library",
"dependencies": {
"mylibrary": "git+https://<credentials>@bitbucket.org/<repo>/mylibrary.git#prod"
}
}
然后你可以将你的应用程序的开发分支合并到生产分支,但是当你在生产上安装 npm 时,仍然安装库的生产分支。
然后当你准备好时,你可以将你的库的 develop 分支合并到库的 prod 分支,当你在 prod 上安装你的应用程序时,你将安装库的 prod 分支,而不是 develop。
我不知道为什么我不断提出对我来说非常明显/重要的用例/问题,但显然几乎没有其他人感兴趣 - 但以防万一其他人正在寻找类似的解决方案,我想我会分享我的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.