Как переопределить вложенные версии зависимостей NPM?

я хотел бы использовать grunt-contrib-jasmine пакет NPM. Он имеет различные зависимости. Часть графика зависимостей выглядит следующим образом:

─┬ grunt-contrib-jasmine@0.4.1
 │ ├─┬ grunt-lib-phantomjs@0.2.0
 │ │ ├─┬ phantomjs@1.8.2-2

к сожалению, в этой версии есть ошибка phantomjs что предотвращает его правильную установку на Mac OS X. Это исправлено в последней версии.

как я могу получить grunt-lib-phantomjs использовать более новую версию phantomjs?

дополнительная информация:

3 ответов


вы, вероятно, уже нашли обходной путь для этого.

в любом случае, вы можете использовать npm shrinkwrap функциональность, чтобы переопределить любую зависимость или суб-зависимость.

Я только что сделал это в нашем проекте grunt. Нам нужна была более новая версия connect, начиная с 2.7.3. доставлял нам неприятности. Поэтому я создал файл с именем npm-shrinkwrap.в JSON :

{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}

npm должен автоматически забрать его во время установки для проект.

(см.: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)


для тех, кто из 2018 и за его пределами, используя npm версии 5 или более поздней версии: отредактируйте свой package-lock.json: удалите библиотеку из "requires" раздел и добавьте его в раздел "зависимости".

например, вы хотите deglob пакета, чтобы использовать glob версия пакета 3.2.11 вместо текущей. Вы открываете package-lock.json и видим:

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "glob": "7.1.2",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  }
},

удалить "glob": "7.1.2", С "requires" добавьте "dependencies" С нужную версию:

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  },
  "dependencies": {
    "glob": {
      "version": "3.2.11"
    }
  }
},

теперь удалите , используя npm install и он добавит недостающие части в .


самый простой минимум-добавить в пакет только начальную сокращенную зависимость json.формат JSON. "От " и" до " нужно

"grunt-contrib-connect": {
  "version": "0.3.0",
  "from": "grunt-contrib-connect@0.3.0",
  "dependencies": {
    "connect": {
      "version": "2.8.1",
      "from": "connect@~2.7.3"
    }
  }
}