有没有办法从 package-lock.json 中提取 package.json?
Is there a way to extract package.json from package-lock.json?
我正在处理一个缺少 package.json 文件的项目。开发者推送了没有package.json文件的package-lock.json文件。
如果可能的话,如何从 package-lock.json 文件中创建一个干净的 package.json?
无法从 package-lock.json
生成完整的 package.json
,因为后者不包含所有必要的数据。它仅包含具有特定版本的依赖项列表,没有原始语义版本。生产和开发依赖与嵌套依赖混合在一起。
可以生成新的 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
键来过滤掉嵌套依赖项,但这会影响项目自身的依赖项。
只需运行 npm init
,如果您已经生成node_modules/
,它将从package-lock.json
中提取所有当前依赖项。如果没有,运行 npm ci
从 package-lock.json
生成节点模块,然后 运行 npm init
生成 package.json
文件。
已接受的答案脚本的略微改进版本。将从 package-lock.
中拉出锁定的版本
const fs = require('fs');
const packageLock = require('./package-lock.json');
const package = require('./package.json');
package.dependencies = Object.keys(package.dependencies)
.reduce((deps, dep) => Object.assign(deps, { [dep]: packageLock.dependencies[dep].version }), {});
package.devDependencies = Object.keys(package.devDependencies)
.reduce((deps, dep) => Object.assign(deps, { [dep]: packageLock.dependencies[dep].version }), {});
fs.writeFileSync('./package-new.json', JSON.stringify(package, null, 2));
我正在处理一个缺少 package.json 文件的项目。开发者推送了没有package.json文件的package-lock.json文件。
如果可能的话,如何从 package-lock.json 文件中创建一个干净的 package.json?
无法从 package-lock.json
生成完整的 package.json
,因为后者不包含所有必要的数据。它仅包含具有特定版本的依赖项列表,没有原始语义版本。生产和开发依赖与嵌套依赖混合在一起。
可以生成新的 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
键来过滤掉嵌套依赖项,但这会影响项目自身的依赖项。
只需运行 npm init
,如果您已经生成node_modules/
,它将从package-lock.json
中提取所有当前依赖项。如果没有,运行 npm ci
从 package-lock.json
生成节点模块,然后 运行 npm init
生成 package.json
文件。
已接受的答案脚本的略微改进版本。将从 package-lock.
中拉出锁定的版本const fs = require('fs');
const packageLock = require('./package-lock.json');
const package = require('./package.json');
package.dependencies = Object.keys(package.dependencies)
.reduce((deps, dep) => Object.assign(deps, { [dep]: packageLock.dependencies[dep].version }), {});
package.devDependencies = Object.keys(package.devDependencies)
.reduce((deps, dep) => Object.assign(deps, { [dep]: packageLock.dependencies[dep].version }), {});
fs.writeFileSync('./package-new.json', JSON.stringify(package, null, 2));