Искаме да добавим автоматична проверка към нашия 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
.