npm 有没有一种方法可以确认package-lock.json实际上解决了package.json中的所有依赖项?

2wnc66cl  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(159)

我们希望向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文件的有效依赖项解析集。

3okqufwl

3okqufwl1#

运行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 ls,然后再运行npm install

g52tjvyc

g52tjvyc2#

...
或者为了保持简单,你可以在安装npm之前在CI中的某个时候运行npm ls。
它不包括没有node_modules的初始npm安装的情况(CI服务器每次都可能是这样)
使用自5.7.x版本起可用的npm ci(https://docs.npmjs.com/cli/ci)。

npm ERR! cipm can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
npm ERR! 
npm ERR! 
npm ERR! Invalid: lock file's  [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)  does not satisfy core-js@^3.0.0-alpha.4

字符串

djmepvbi

djmepvbi3#

使用npm ci命令。它检查以确保package.jsonpackage-lock.json始终同步。
如果它们不同步,则会出现类似以下的错误

npm ERR! 

npm ERR! Invalid: lock file's [email protected] does not satisfy yuglify@^2.0.1

字符串

相关问题