git submodule 执行无效_【重谈npm】当下载一个项目到本地执行npm install报错时应该怎么办...

603ba6573acfbf926489679c378e734c.png

本文记录了我从下载一个项目到本地,执行npm install所遇到的问题,以及在此过程中我为了搞清楚这些问题从而学到的一些东西。

首先拿到一个项目(前端项目),我们想跑起来项目的第一步一般都是执行npm install,但往往我们会在这一步就开始遇到大坑。比如这样:

7baa24861bcc6a73f3687e1bc591b6ee.png

这时候的我们可能会突然蛋疼,开始好奇这好好的项目为啥在别人电脑就跑的好好的,我就从master分支拉下来安装个依赖都不行。然而这个时候我们肯定不会先质疑项目本身的问题,问题肯定是环境的问题,这时开始根据经验尝试各种手段:

1、删掉package-lock.json?

这是比较不明智的做法,当然也是最粗暴的做法。首先每当要做删除操作时,一个负责任的程序员应该问自己“这是合理安全的做法吗,会带来什么连锁问题”。如果要执行删除package-lock.json文件时,我们应该先了解清楚package-lock.json这个文件的作用是什么,为什么git建议把这个文件加入版本控制。

其实见名知意,它是用来“锁”住这个项目的依赖包版本的,管理着和这个项目配套的一套依赖包,其中包括着存在依赖关系的包的最佳版本组合。所以如果你只是粗暴地删掉这个文件,可能会解决你的问题,但这很明显不是一个好的做法。

2、查看node版本和registry

这是一项基本操作,如果你使用nvm和nrm管理node版本和registry的话,敲下如下命令:

nvm ls

应该会看到如下景象

b4d7802bf0f1ae6847c1b59d03e36f4a.png

然后是

nrm ls

a97c63dfee27a082aff4423b960a5bb3.png

接下来你可以判断是不是因为你所依赖的包和你所使用的node版本存在不兼容问题,或是你要下载的包是通过当前registry下载不到的。

3、清除npm缓存

如果排除掉node版本和registry的原因,我们可以接着尝试清除npm缓存,缓存这个东西你懂得,虽然是一个提高访问体验的东西,但有时也可能会给我们带来一些麻烦。通过如下命令可清除npm下载缓存:

npm cache clean --force

大多数人通过这行命令解决了他们的问题 ☞

https://github.com/vuejs-templates/webpack/issues/990​github.com

但这仍然对我遇到的情况无效 ‍

4、尝试yarn

除了npm我们还知道一个厉害的东西叫yarn,虽然它很厉害,但它也只是个npm包,所以它还是依赖于npm的,但据说它基于npm改进了很多,拥有了并发无阻塞式的包依赖下载能力。它和npm一样,在成功下载项目依赖包后会生成一个lock文件(yarn.lock)用来“锁”住项目所依赖包的“最佳”组合。

ccbed5668c472c61fb268366b97fe63a.png

结果就是yarn这个神奇的东西的确解决了我的问题,但对于yarn和npm的区别我觉得还需要进一步学习了解。但日后如果再次遇到npm install失败时,并且在检查node版本和registry以及清除npm缓存的尝试均无效后,我们可以尝试通过yarn来安装项目依赖,或者一开始就使用yarn。

因为不管是yarn还是npm,它们都是一个根据package.json中的dependences、devDependences或peerDependences所列举的项目依赖项下载对应包的工具。所以我们不应该拘泥于“和node配套就应该改使用npm作为包管理器”或“yarn是新东西,我不愿意尝试”这种思想。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值