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

ALH*_*ALH 0 node.js npm package.json package-lock.json

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

如何从 package-lock.json 文件创建一个干净的 package.json 以防万一?

Bri*_*ter 6

只需运行它就会从您已经生成的npm init所有当前依赖项中提取出来。如果没有,请运行以生成节点模块,然后运行以生成文件。package-lock.jsonnode_modules/npm cipackage-lock.jsonnpm initpackage.json

  • 它实际上并不是从“package-lock.json”生成“package.json”,而是从“node_modules”生成。如果没有“node_modules”,可以运行“npm ci”从“package-lock.json”生成“node_modules”,然后运行“npm init”生成“package.json”。 (3认同)

Est*_*ask 5

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

package.json可以生成Fresh ,然后使用这些依赖项进行扩充,例如:

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));
Run Code Online (Sandbox Code Playgroud)

可以通过检查requires键过滤掉嵌套的依赖项,但这会影响项目自身的依赖项。