npm从package-lock.json文件中创建一个package.json文件?

时间:2018-12-19 20:38:19

标签: javascript node.js npm

我有一个项目,它恰好具有完整的node_modules目录和一个<iframe id="theFrame" src="plugin.html?id=121212"></iframe> 文件,但没有package-lock.json文件。

所以我运行了package.json以创建一个新的npm init文件,但是现在我在努力使其包含项目的依赖项。

是否可以使npm读取node_modules目录或package.json并创建匹配的package-lock.json文件?

1 个答案:

答案 0 :(得分:6)

package-lock.json没有足够的信息来产生准确的package.json文件。它包含所有已安装软件包和版本的列表,但列表中还包含子依赖项。

您可以阅读信息并创建一个新的依赖项列表,但是最终将得到所有依赖项的列表,包括您不直接依赖的子依赖项。 dependenciesdevDependencies之间也没有区别。

有趣的是,npm似乎能够记住在给定目录中安装了哪些软件包一定时间(它可能缓存在某个地方)。如果锁定文件最初是在您的计算机上创建的,则简单的npm init 可能会为您提供准确的package.json文件。

如果您真的想以JSON格式生成所有软件包的列表,则可以使用如下脚本:

var dependencies = require('./package-lock.json').dependencies;
var list = {};

for (var p of Object.keys(dependencies)) {
    list[p] = dependencies[p].version;
}
console.log(JSON.stringify(list, null, '  '));