/ / Има ли начин да се потвърди, че пакет-lock.json всъщност решава всички зависимости в package.json? - node.js, npm, package.json

Има ли начин да се потвърди, че пакетът lock.json всъщност решава всички зависимости в пакет.json? - node.js, npm, package.json

Искаме да добавим автоматична проверка към нашия CI сървър, който да предотврати извършването на код, който да актуализира зависимост в package.json но не актуализира разрешената зависимост в package-lock.json.

Това може да се случи, ако например някой е актуализирал зависимост package.json ръчно, но изтича npm install вместо npm update (npm install ласки package-lock.json, ако е налице). Или може да се случи, дори ако някой изпълни правилното npm командата, когато актуализирате зависимост, но след това забравя да извърши промените в package-lock.json, Опитваме се да наблюдаваме тези неща в прегледа на кода, но автоматизираната проверка определено ще бъде по-добра. Има ли npm команда, която прави това?

Ето един пример за илюстрация.

Преди:

// package.json
{
"lodash": "~3.1.0"
}

// package-lock.json
{
"dependencies": {
"lodash": {
"version": "3.1.3"
}
}
}

Някой актуализира package.json но забравя да извърши промяната package-lock.json.

След:

// package.json
{
"lodash": "~3.2.0"
}

// package-lock.json (not changed)
{
"dependencies": {
"lodash": {
"version": "3.1.3"
}
}
}

Сега package-lock.json вече не отразява валиден набор от резолюции за зависимост package.json файл.

Отговори:

1 за отговор № 1

Работещи npm ls изглежда, че прави това за вас, защото хвърля грешка за несъответствия между тях package.json и е ключалка, В възел скрипт можете да направите това с помощта на възел child_process.exec или .execSync, Async изглежда по-чист, ако искате да включите полезни съобщения:

const cp = require("child_process");
const verify = () => cp.exec("npm ls", error => {
if (error) {
console.error("Dependency mismatch between package.json and lock. Run: npm install");
throw error;
}
console.log("Dependencies verified =)");
});

Или за да го поддържате просто можете просто да бягате npm ls в някакъв момент в CI преди npm install.