Как настроить package.json проекта, чтобы его можно было установить из локального реестра с помощью verdaccio

Я изучаю микросервисы с докером и кубернетом по простому проекту, теперь я пытаюсь использовать локальный реестр, установленный как контейнер докера с рулем. Я опубликовал свой пакет/библиотеку в своем локальном реестре (я использую verdaccio) и успешно установил его в свой текущий проект с помощью команды npm install @mycompany/mylibs --registry=http://localhost:4873. Моя проблема в том, что когда я пытаюсь развернуть свой проект в kubernetes через скаффолд, мне не удается загрузить пакеты из конфигурационного файла package.json. Я пробовал как настроить файл .npmrc в корневую папку проекта, так и реестр по умолчанию в файле verdaccio conf, но все терпит неудачу. Может кто сталкивался с такой же проблемой как у меня и как ее решить. Кто-нибудь, помогите пожалуйста. Спасибо

Это моя структура проекта:

MyProject
|-auth (this service has dependency to @mycompany/mylibs)
| |-src
| |-Dockerfile
| |-package.json
|
|-infra/kube
| |-auth-depl.yaml
| |-ingress-srv.yaml


MySharedLibrary
| |-src
| |-package.json

package.json авторизации:

{
  "name": "auth",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "ts-node-dev src/index.ts",
    "test": "jest --watchAll --no-cache"
  },
  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node",
    "setupFilesAfterEnv": [
      "./src/test/setup.ts"
    ]
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@mycompany/mylibs": "^1.0.3",
    "@types/cookie-session": "^2.0.42",
    "@types/express": "^4.17.9",
    "@types/jsonwebtoken": "^8.5.0",
    "cookie-session": "^1.4.0",
    "express": "^4.17.1",
    "express-async-errors": "^3.1.1",
    "express-validator": "^6.7.0",
    "jsonwebtoken": "^8.5.1",
    "mariadb": "^2.5.1",
    "mysql2": "^2.2.5",
    "sequelize": "^6.3.5",
    "ts-node-dev": "^1.0.0",
    "typescript": "^4.1.2"
  },
  "devDependencies": {
    "@types/jest": "^26.0.19",
    "@types/supertest": "^2.0.10",
    "jest": "^26.6.3",
    "supertest": "^6.0.1",
    "ts-jest": "^26.4.4"
  }
}

Я использую:

ПК с Windows 10 в качестве основного хоста для докера и место размещения проекта.

версия докера 19.03.13

нпм версии 6.14.6

версия 4.12.0

руль 3.5.3

леса 1.13.0

Сообщение об ошибке после развертывания моего проекта с помощью skaffold dev :

npm ERR! 404 Not Found - GET https://registry.npmjs.org/@mycompany%2fmylibs - Not found
npm ERR! 404
npm ERR! 404  '@mycompany/mylibs@^1.0.3' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'app'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

Я хочу, чтобы в процессе развертывания каждый контейнер мог найти все необходимые зависимости в локальном реестре (http://localhost:4873), а когда он не смог их найти, он должен попытаться получить общедоступный npm (https://Registration.npmjs.org или npmjs.com).


person nomib    schedule 25.03.2021    source источник


Ответы (2)


Спасибо всем за помощь, я решил эту проблему, перенастроив свой Dockerfile в службе аутентификации, добавив строку:

RUN npm config set registry http://<the_local_registry_container_IP>:4873

Я успешно создал контейнер, но он вызвал новые проблемы. Запрос устарел, см. github.com/request/request/issues/3142, потому что я использую супертест. Я не знаю, почему я все еще ищу главную проблему. В другом случае, если я соберу его с общедоступным репозиторием npm, это не вызовет этой проблемы.

person nomib    schedule 02.04.2021

Вам нужно связать область с вашим реестром:

npm login --registry=http://localhost:4873 --scope=@mycompany

Вы можете найти документацию здесь

После этого npm install установите пакет из вашего репозитория, если пакет находится в области @mycompany

person Troopers    schedule 25.03.2021
comment
Спасибо за ответ. Я думаю, что здесь есть недоразумение. На самом деле я могу установить пакет через командную строку вручную (не в процессе развертывания) через npm install @mycompany/mylibs --registry http://localhost:4873. Моя проблема заключается в установке во время процесса развертывания в кластере, потому что я не знаю, как настроить свой кластер, как установить конфигурацию в файле package.json или в Dockerfile, чтобы кластер знал, как получить зависимость (локальную или общедоступную). - person nomib; 26.03.2021
comment
@nomib откройте образ докера и запустите команду npm login из моего ответа или команду npm config из документации, чтобы настроить область действия в вашем образе. .npmrc будет изменено - person Troopers; 26.03.2021