【问题标题】:Is there a way to extract package.json from package-lock.json?有没有办法从 package-lock.json 中提取 package.json?
【发布时间】:2019-06-07 15:25:52
【问题描述】:

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

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

【问题讨论】:

  • 你不能。 package-lock.json 不包含 package.json 中的所有数据。它包含依赖版本。只需让开发人员提交 package.json。
  • 您可以获得名称和版本,也许还可以找出依赖项和 devDependencies,但这并不是包文件中的全部内容 - 它可能还包含您正在使用的某些包的脚本和配置,例如。
  • @estus 没有人可以访问他。这就是我试图对其进行逆向工程的原因。

标签: node.js npm package.json package-lock.json


【解决方案1】:

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

可以生成新的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 键过滤掉嵌套的依赖关系,但这会影响项目自身的依赖关系。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 只是为我创建一个空白包文件!
    • @asulaiman 你用的是什么版本?我刚刚使用6.8.0 再次对其进行了测试,并且效果很好。
    • 它实际上并不是从package-lock.json 生成package.json,而是从node_modules。如果你没有node_modules,你可以运行npm cipackage-lock.json生成node_modules,然后运行npm init生成package.json
    • @Stevula 很好的解释!我正在更新答案。
    猜你喜欢
    • 2018-10-06
    • 2018-03-21
    • 2017-12-30
    • 2020-09-24
    • 1970-01-01
    • 2018-07-05
    • 2021-02-03
    • 2020-02-10
    • 2017-12-16
    相关资源
    最近更新 更多