我从github克隆了一个仓库,仓库中有一个package-lock.json(但没有package.json)。然后在git bash终端中,我转到目录并运行npm install
,但我仅收到一条消息,说没有package.json,然后package-lock.json中的所有内容都被删除,因此除项目外,它基本上是空的名称和版本。
我认为在目录中使用package-lock.json运行npm install
足以重新创建node_modules,但是我是否严重误解了它的工作原理?顺便说一句,我有节点8.12.0和npm 6.4.1,并且在Windows 10上运行。另外,我认为package-lock.json是在unix系统上创建的,因此在上使用package-lock.json时可能会出现问题。不同的操作系统?
我已经尝试运行npm init
只是为了获取package.json文件,然后运行npm install
,但这仍然不能为我提供一个node_modules文件夹。
答案 0 :(得分:1)
从2018年3月5日开始,您可以运行npm ci
从package-lock.json安装软件包。
npm ci绕过软件包的package.json来从 软件包的锁定文件。
https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable
答案 1 :(得分:0)
AFAIK,package-lock.json
文件依赖于package.json
文件的存在,因此您将无法仅从node_modules
文件重新创建package-lock.json
文件夹(很高兴在这里被证明是错误的。)
因此,最好的选择是使用auto-install之类的模块,该模块能够根据项目中的依赖关系生成package.json
文件,就像它们在文件中一样。
将其全局安装(npm install -g auto-install
),然后需要生成一个空的package.json
文件以使其运行(在项目根目录中使用npm init -y
)。用命令auto-install
开始,它应该将依赖项添加到package.json
文件中。
HTH
答案 2 :(得分:0)
package-lock.json
记录了需要安装的软件包的确切版本和URL,因此您可以使用npm进行相应的安装:
--no-package-lock
选项,告诉npm不要触摸package-lock.json
文件例如,要将所有软件包安装在package-lock.json
中:
cat package-lock.json | jq '.dependencies[].resolved' | xargs npm i --no-package-lock
jq
是用于解析jq
的命令行工具,您可以编写一个简单的JavaScript Shell来解析它(如果您不想安装jq
或学习jq的查询语法)。