[英]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.