2017-07-24 20 views
1

我们希望向我们的CI服务器添加一个自动检查,以防止代码被提交,以更新package.json中的依赖项,但不更新已解决的依赖项package-lock.json有没有办法确认package-lock.json实际上解析了package.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文件相关决议。

回答

0

运行npm ls似乎为您做这件事,因为它为package.json和它的lock之间的差异引发错误。在节点脚本中,您可以使用节点的child_process.exec.execSync执行此操作。如果你想包括有用信息异步似乎更清洁:

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 =)"); 
}); 

还是要保持它的简单在你的CI一些点npm install之前,你可以只运行npm ls

相关问题