Ошибка при установке пакета с использованием npm вместо пряжи

Я создал репозиторий git, который будет использоваться как пакет npm в другом проекте. Допустим, имя общего репозитория - genesis-service-broker.

Я использую этот общий репозиторий внутри одной из служб (служба активации). В этом проекте я устанавливаю пакет с помощью пряжи. Здесь все работает отлично.

    "dependencies": {
        ...
        "genesis-service-broker": "git+https://${key}:[email protected]_project.com/${user}/genesis-service-broker.git#create_service_broker_for_genesis",
        ...
    }

Когда я пытаюсь использовать пакет genesis-service-broker внутри другой службы (службы партнера), он не может установить зависимости. В этом проекте я устанавливаю зависимости с помощью npm. Если я устанавливаю зависимости с помощью yarn, он работает отлично.

Я не получаю ошибок в команде npm install. Я просто не могу найти папку genesis-service-broker внутри node_modules, когда я устанавливаю зависимости с помощью npm.

Файл package.json в репозитории genesis-service-broker. (для справки)

{
  "name": "service-broker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "[email protected]_project.com:amol.barewar/service-broker.git"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "config": "^3.2.5",
    "form-data": "^3.0.0",
    "node-fetch": "^2.6.0",
    "request": "^2.88.0",
    "uuid": "^3.4.0"
  }
}


person Amol Barewar    schedule 25.02.2020    source источник


Ответы (1)


здесь есть разница в поведении между yarn и npm

yarn add сохраняет имя проекта git в зависимостях и создает папку с тем же именем в node_modules.

Итак, yarn add git+https://${key}:[email protected]_project.com/${user}/genesis-service-broker.git#create_service_broker_for_genesis приведет к установке модуля как node_modules / genesis-service-broker

С другой стороны, npm install получает имя из свойства name в package.json; и это приведет к добавлению модуля как node_modules / service-broker в вашем случае ... а также карта зависимостей будет похожа на

"dependencies": {
   ...
   "service-broker": "git+https://${key}:[email protected]_project.com/${user}/genesis-service-broker.git#create_service_broker_for_genesis",
   ...
}

Из-за этой разницы requires(...) может выйти из строя.

Как в этом случае с пряжей этот модуль будет доступен через -

require('genesis-service-broker')

А для npm через -

require('service-broker')

В общем, это поможет сохранить свойство name в package.json таким же, как и имя проекта.

person Prathamesh Salunkhe    schedule 25.02.2020