Node.js 有没有办法从package-lock.json中提取package.json?

Node.js 有没有办法从package-lock.json中提取package.json?,node.js,npm,package.json,package-lock.json,Node.js,Npm,Package.json,Package Lock.json,我正在处理一个缺少package.json文件的项目。开发人员在没有package.json文件的情况下推送了package-lock.json文件 如果可能的话,如何从package-lock.json文件创建干净的package.json?不可能从package-lock.json生成完整的package.json,因为后者不包含所有必要的数据。它只包含具有特定版本(没有原始版本)的依赖项列表。生产和开发依赖项与嵌套依赖项混合在一起 可以生成Fresh package.json,然后使用以下

我正在处理一个缺少package.json文件的项目。开发人员在没有package.json文件的情况下推送了package-lock.json文件


如果可能的话,如何从package-lock.json文件创建干净的package.json?

不可能从package-lock.json生成完整的package.json,因为后者不包含所有必要的数据。它只包含具有特定版本(没有原始版本)的依赖项列表。生产和开发依赖项与嵌套依赖项混合在一起

可以生成Fresh package.json,然后使用以下依赖项进行扩展:

const fs = require('fs');
const packageLock = require('./package-lock.json');
const package = require('./package.json');

package.dependencies = Object.entries(packageLock.dependencies)
.reduce((deps, [dep, { version }]) => Object.assign(deps, { [dep]: version }), {});

fs.writeFileSync('./package-new.json', JSON.stringify(package, null, 2));

通过检查requires key可以筛选出嵌套的依赖项,但这可能会影响项目自身的依赖项。

只需运行npm init,如果已经生成了节点模块,它将从package-lock.json中提取所有当前依赖项。如果没有,请运行npm ci从package-lock.json生成节点模块,然后运行npm init生成package.json文件。

您不能。package-lock.json不包含package.json中的所有数据。它包含依赖版本。只需让开发人员提交package.json即可。您可以获得名称和版本,也许还可以找出依赖项和devdependency,但这并不是包文件中的全部内容,它可能还包含您正在使用的某些包的脚本和配置,例如。@estus没有人可以访问他。这就是为什么我要尝试对它进行反向工程。只需为我创建一个空白的包文件@你用的是什么版本?我刚刚用6.8.0再次测试了它,它工作得很好。它实际上不是从package-lock.json生成package.json,而是从node_模块生成。如果没有节点_模块,可以运行npm ci从package-lock.json生成节点_模块,然后运行npm init生成package.json。@Stevula很好的解释!我正在更新答案。