Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gitlab npm package registry #360

Open
chochinlu opened this issue Feb 9, 2022 · 0 comments
Open

gitlab npm package registry #360

chochinlu opened this issue Feb 9, 2022 · 0 comments
Labels

Comments

@chochinlu
Copy link
Owner

chochinlu commented Feb 9, 2022

https://xenby.com/b/288-%E6%95%99%E5%AD%B8-%E5%BB%BA%E7%AB%8B%E8%88%87%E4%BD%BF%E7%94%A8-gitlab-%E7%A7%81%E4%BA%BA-npm-package-registry

https://docs.gitlab.com/ee/user/packages/workflows/project_registry.html

您可以使用該存儲庫來存儲所有包,而不是使用 GitLab 存儲庫來存儲代碼。

用途可能在於:

  • 您想在 GitLab 中發布您的包,但發佈到與您的代碼存儲位置不同的項目。
  • 您想在一個項目中將包組合在一起。例如,您可能希望將所有 npm 包都放在一起
  • 當您為其他項目安裝軟件包時,您希望使用一個遙控器(remote)。
  • 您希望 CI/CD 管道將所有包構建到一個項目中,以便負責驗證包的人員可以在一個地方管理它們。

create npm local modules

https://medium.com/evan-fang/npm%E4%BD%BF%E7%94%A8local-modules-22ed2109b01

├── bar
│   ├── index.js
│   └── package.json
├── foo
│   ├── index.js
│   └── package.json
├── index.js
├── node_modules
│   ├── .package-lock.json
│   ├── bar -> ../bar
│   └── foo -> ../foo
├── package-lock.json
└── package.json 
npm init -y
touch index.js

mkdir foo bar

cd foo
npm init -y 
touch index.js

cd ../bar
npm init -y
touch index.js

cd ..
npm install --save foo bar 

在根目錄的package.json 會看到 :

{
  "dependencies": {
    "bar": "file:bar",
    "foo": "file:foo"
  }
}

index.js 可以使用 foo 和 bar 兩個 module了

Creating Node.js modules

Creating Node.js modules

建立好之後就可上傳,

在這之前要確認你在npmjs.org 有帳號, 會要求帳號與驗證:

npm adduser 

npm publish

https://segmentfault.com/a/1190000038178642

如果你是免錢的, 太common的package名字會被要求換個不要和public modules相近的名稱

公開的package:

npm publish --access public

如果你是免錢的, 沒有在 package.json設定 private: true 那麼 package會被發布成public的!!

npmrc

The npm config files

https://docs.npmjs.com/cli/v8/configuring-npm/npmrc

npm 可以從 command line, environment variables 和 npmrc 檔案讀取設定

npmrc檔案可以寫在 global 或是project,

寫在這: per-project config file (/path/to/my/project/.npmrc)

publish an npm package by using ci/cd

https://docs.gitlab.com/ee/user/packages/npm_registry/index.html#publish-an-npm-package-by-using-cicd

publish npm package to gitlab npm registry

https://shivamarora.medium.com/publishing-your-private-npm-packages-to-gitlab-npm-registry-39d30a791085

上傳

原理就是你在gitlab 設定一個repo是用來當作 npm registry, 假設叫做A

那你可以做任何module repo, 假設我們叫做B,
在B裡面設定.npmrc與package.json , 將registry位置指向A

假設你所在的domain 叫做 DDD

.npmrc:

@DDD:registry=https://xxx.xx/api/v4/projects/{project ID of B}/packages/npm/

//xxx.xx/api/v4/projects/{project ID of B}/packages/npm/:_authToken=${GITLAB_AUTH_TOKEN}

package.json 加入:

{
  "name": "@DDD/{repo name of B}"
  "publishConfig": {
    "@DDD:registry": "https://xxx.xx/api/v4/projects/{project ID of B}/packages/npm/"
  }
}

注意 package.json 的 name命名必須要是 @{domain name} 開頭

發布的時候, 用以下命令:

GITLAB_AUTH_TOKEN=xxxxx npm publish

這裡的 GITLAB_AUTH_TOKEN 可以用 personal access token, 也可以在 B 設定 deploy token

順利的話, 就可以在B看到上傳的module

下載

不用npm login, 可以在npm config裡面加入新的這個

npm config set @DDD:registry https://xxx.xx/api/v4/projects/{project ID of B}/packages/npm/
npm config set //xxx.xx/:_authToken xxxxxxxx

就可以直接:

npm install @DDD/B
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant