Получить библиотеки из package-lock.json - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно получить все библиотеки и версии пакета-lock.json.

Для предоставления контекста.Я запускаю модуль безопасности внутри jenkins, который отвечает за инвентаризацию библиотек для каждого приложения.Идея состоит в том, чтобы принести все родительские версии с собственными требованиями.

Например:

{
  "name": "node-demo",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "accepts": {
      "version": "1.3.4",
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
      "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
      "requires": {
        "mime-types": "~2.1.16",
        "negotiator": "0.6.1"
      }
    }
}

Из этого пакета нам нужно взять и собрать json с: списком библиотек, подобным этому:

libraries: [
{libName: "accepts" , libVersion: "1.3.4" parent: null}
{libName: "mime-types", libVersion: "~2.1.16", parent: "accepts"}
{libName: "negotiator", libVersion: "0.6.1", parent: "accepts}
]

Еще одна деталь, будучи Дженкинсом, мне нужно запустить скрипт, который делает это в bash.Они знают, есть ли уже что-то похожее

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2018

Я предположил, что вы ищете решение для узла, увидев тег nodejs.К счастью, для узла могут требоваться файлы json.Как только мы получим данные из package-lock.json, мы можем легко извлечь данные:

const lockJson = require('./package-lock.json'); // edit path if needed

const libraries = [];

// Loop through dependencies keys (as it is an object)
Object.keys(lockJson.dependencies).forEach((dependencyName) => {
  const dependencyData = lockJson.dependencies[dependencyName];

  libraries.push({
    libName: dependencyName,
    libVersion: dependencyData.version,
    parent: null,
  });

  // Loop through requires subdependencies      
  if (dependencyData.requires) {
    Object.keys(dependencyData.requires).forEach((subdependencyName) => {
      const subdependencyVersion = dependencyData.requires[subdependencyName];

      libraries.push({
        libName: subdependencyName,
        libVersion: subdependencyVersion,
        parent: dependencyName,
      });
    });
  }
});

console.log(libraries);

Сохраните это как convert.js и запустите его, используя node convert.js.

Надеюсь, что это поможет,ура!

...