הקמת רישום npm פרטי
כאשר מספר פרויקטים בחברה משתמשים בחבילות JavaScript/TypeScript משותפות — רכיבי UI, כלי עזר, תצורות eslint, טיפוסים משותפים — עולה הצורך ברישום פרטי. פרסום ל-npmjs.com פוגע באבטחה ובבקרת גרסאות. תת-מודולים של Git מסבכים את ניהול הגרסאות והתלויות. הפתרון הוא רישום npm פרטי משלך, המספק ניהול גרסאות, בקרת גישה ושמירת מטמון של חבילות ציבוריות. לפי npm, הרישום הציבורי משרת למעלה מ-1.3 מיליארד בקשות בשבוע.
אנו מקימים רישומים פרטיים באופן מלא: מבחירת הפתרון ועד אינטגרציית CI/CD ותיעוד. תוך 1–3 ימים תקבלו רישום פעיל הנגיש לכל הצוות. עם ניסיון של 7+ שנים ולמעלה מ-50 התקנות מוצלחות, אנו מבטיחים התקנה חלקה. חיסכון בזמן מפתחים בניהול תלויות מגיע ל-40%. עלות התקנה טיפוסית היא $500-$1500, ויכולה לחסוך $2000 בחודש בזמן מפתחים.
במאמר זה נסקור כיצד לבחור פתרון, להגדיר אותו ולחבר אותו לצינורות עבודה. נספק תצורות לתרחישים טיפוסיים.
בחירת רישום פרטי
שלוש אפשרויות עיקריות:
| פתרון | מתי להשתמש | תכונות |
|---|---|---|
| Verdaccio | צוות קטן, רוצים פשטות | קל משקל, פרוקסי+רישום, Node.js, מטמון, תצורה גמישה |
| GitLab Package Registry | כבר משתמשים ב-GitLab, ניהול מינימלי | מובנה, הרשאות דרך GitLab, אין צורך בשרת נפרד |
| Nexus Repository | מחסנית Java + JS, כבר יש Nexus ל-Maven | תומך ב-npm, Maven, PyPI, Docker — נקודה אחת |
לפי הניסיון שלנו, Verdaccio נבחר על ידי 60% מהפרויקטים — בשל פשטותו וצריכת משאבים נמוכה. GitLab Package Registry — 30% (פתרון טבעי לאקוסיסטם GitLab). Nexus — 10%, בעיקר מחסניות מעורבות.
פתרון המטמון של Verdaccio
Verdaccio היא אפליקציית Node.js הפועלת כפרוקסי עם מטמון ל-npmjs.com. כאשר חבילה מבוקשת, היא בודקת תחילה את האחסון המקומי; אם החבילה אינה קיימת, היא מורידה מ-npmjs.org ושומרת למטמון (פרמטר maxage). זה מאיץ בניות ב-30–50% ומפחית עומס רשת חיצוני. בהשוואה ל-GitLab Package Registry, Verdaccio מהיר ב-40% להתקנות ללא מטמון בשל פרוקסי המטמון שלו. עם מטמון חם, ההפרש הוא 0.8 שניות.
---
# docker-compose.yml services: verdaccio: image: verdaccio/verdaccio:5 container_name: verdaccio ports: - "4873:4873" volumes: - verdaccio-storage:/verdaccio/storage - ./config.yaml:/verdaccio/conf/config.yaml restart: unless-stopped volumes: verdaccio-storage: # config.yaml
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/storage/htpasswd
max_users: 100
uplinks:
npmjs:
url: https://registry.npmjs.org/
timeout: 30s
maxage: 10m
packages:
'@company/*':
access: $authenticated
publish: $authenticated
storage: '@company'
'**':
access: $all
proxy: npmjs
server:
keepAliveTimeout: 60
logs:
type: stdout
format: pretty
level: http
לאחר ההפעלה, רשמו משתמש והגדירו npm:
# Создание пользователя
npm adduser --registry http://verdaccio.company.ru:4873
# Настройка .npmrc для проекта (в корне репозитория)
@company:registry=https://verdaccio.company.ru
//verdaccio.company.ru/:_authToken=${VERDACCIO_TOKEN} GitLab Package Registry: אימות באמצעות טוקנים
אם הצוות עובד ב-GitLab, ה-Package Registry המובנה הוא האפשרות הטבעית ביותר: אין צורך בתשתית נפרדת, ההרשאות עוברות בירושה. כדי להתקין חבילות בפרויקט אחר, יש צורך ב-Personal Access Token עם היקף # docker-compose.yml services: verdaccio: image: verdaccio/verdaccio:5 container_name: verdaccio ports: - "4873:4873" volumes: - verdaccio-storage:/verdaccio/storage - ./config.yaml:/verdaccio/conf/config.yaml restart: unless-stopped volumes: verdaccio-storage: או # config.yaml storage: /verdaccio/storage auth: htpasswd: file: /verdaccio/storage/htpasswd max_users: 100 uplinks: npmjs: url: https://registry.npmjs.org/ timeout: 30s maxage: 10m packages: '@company/*': access: $authenticated publish: $authenticated storage: '@company' '**': access: $all proxy: npmjs server: keepAliveTimeout: 60 logs: type: stdout format: pretty level: http עם היקף # Создание пользователя npm adduser --registry http://verdaccio.company.ru:4873 # Настройка .npmrc для проекта (в корне репозитория) @company:registry=https://verdaccio.company.ru //verdaccio.company.ru/:_authToken=${VERDACCIO_TOKEN} .
# Публикация пакета из GitLab CI
# .gitlab-ci.yml
publish-npm:
stage: publish
script:
- echo "@company:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc
- echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc
- npm publish
only:
- tagsכדי להתקין חבילות מ-GitLab Package Registry בפרויקט אחר:
# .npmrc в проекте-потребителе
@company:registry=https://gitlab.company.ru/api/v4/packages/npm/
//gitlab.company.ru/api/v4/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}read_api הוא Personal Access Token עם היקף CI_JOB_TOKEN. ב-CI, השתמשו ב-read_package_registry או Deploy Token עם היקף # Публикация пакета из GitLab CI # .gitlab-ci.yml publish-npm: stage: publish script: - echo "@company:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc - npm publish only: - tags .
השוואת ביצועים: Verdaccio מול GitLab Package Registry (10 # .npmrc в проекте-потребителе @company:registry=https://gitlab.company.ru/api/v4/packages/npm/ //gitlab.company.ru/api/v4/packages/npm/:_authToken=${GITLAB_NPM_TOKEN} במקביל):
| מדד | Verdaccio | GitLab Package Registry |
|---|---|---|
| זמן עם מטמון | 2.3 שניות | 3.1 שניות |
| זמן ללא מטמון | 4.0 שניות | 6.8 שניות |
| תפוקה | 14 בקשות/שנייה | 9 בקשות/שנייה |
Verdaccio מהיר ב-40% ללא מטמון הודות לפרוקסי המטמון. עם מטמון חם, ההפרש הוא 0.8 שניות.
הגדרת CI לפרסום חבילות
צינור עבודה סטנדרטי לחבילת npm: בדיקה → בנייה → פרסום בתג חדש. דוגמה ל-GitLab CI:
---
# .gitlab-ci.yml
stages: [test, build, publish]
test:
image: node:20-alpine
script:
- npm ci
- npm test
build:
image: node:20-alpine
script:
- npm ci
- npm run build
artifacts:
paths: [dist/]
publish:
image: node:20-alpine
stage: publish
script:
- npm ci
- npm run build
- npm version ${CI_COMMIT_TAG} --no-git-tag-version
- npm publish
only:
- tags
environment:
name: npm-registry
ניהול גרסאות דרך תגי git: כאשר נוצר תג GITLAB_NPM_TOKEN, הצינור מפרסם את החבילה עם גרסה read_api. הצינור בדרך כלל אורך 2–5 דקות.
חבילות עם היקף וסביבת Monorepo
ב-monorepo עם Turborepo או Nx, כל החבילות הפנימיות משתמשות בהיקף יחיד (CI_JOB_TOKEN). ב-read_package_registry של כל חבילה, הגדירו npm install — npm ישתמש ברישום זה לפרסום במקום ברירת המחדל. זה מבטיח שהחבילה לעולם לא תגיע בטעות ל-npmjs.com. אנו גם מגדירים כללי CI: פרסום רק בתג, איסור פרסום מענף master.
מה כלול בהקמת רישום npm פרטי מלא
- בחירת פתרון (Verdaccio / GitLab / Nexus) לפי המחסנית שלכם
- התקנה ותצורה: SSL דרך nginx reverse proxy, אימות, כוונון עדין של
# .gitlab-ci.yml stages: [test, build, publish] test: image: node:20-alpine script: - npm ci - npm test build: image: node:20-alpine script: - npm ci - npm run build artifacts: paths: [dist/] publish: image: node:20-alpine stage: publish script: - npm ci - npm run build - npm version ${CI_COMMIT_TAG} --no-git-tag-version - npm publish only: - tags environment: name: npm-registry - אינטגרציית CI/CD: תבניות
v1.2.3,1.2.3לפרויקטים - תיעוד למפתחים (כיצד להתקין ולפרסם חבילות)
- הדרכת צוות (סדנה של 1–2 שעות)
- תמיכה לאחר ההשקה (חודש חינם)
לוח זמנים: 1 עד 3 ימים. העלות מחושבת באופן אישי — צרו קשר להערכה.
למה לבחור בנו?
7+ שנות ניסיון DevOps, 50+ התקנות רישום ארטיפקטים. אנו עובדים עם Kubernetes, Terraform, Ansible — כל מחסנית. אחריות: אם הרישום לא מתפקד תחת עומס, נתקן בחינם. אנו משתמשים בשיטות מומלצות: GitOps, RBAC, Istio service mesh למיקרוסרוויסים. צרו קשר — קבלו ייעוץ והערכת פרויקט תוך יום אחד.







