簡體   English   中英

package package.json 應用程序不同分支中的不同節點 package 版本?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM