npm遇到的问题总结

684 阅读3分钟

1 npm i 时间过长 卡顿问题

1)镜像问题
  • .查看当前镜像源: npm config get registry / npm config list
  • 不是淘宝的,更换为淘宝镜像
  • 更换镜像: npm config set registry registry.npm.taobao.org
2)与本地node_modules版本冲突

删除当前的node_modules文件 快速完全删除node_modules

//安装npm包 rimraf
npm install rimraf -g 

//通过cmd命令 进入所需删除的node_modules文件夹位置 
cd node_modules

//输入命令进行删除
rimraf node_modules
3)与本地npm相关资源冲突

只要删除对应的文件夹,重新执行npm i 命令就可以

//删除对应的文件
C:\Users\Administrator\AppData\Roaming\npm

2 npm run dev 报错版本不一致

报错如下图:

解决方法,图中绿色文字:

3 node_modules导致IDEA项目很卡

将node_modules文件夹添加到excluded.

4 npm install 原理

就像上图中1,2 问题一样,当时虽然问题解决了,但是我还是很疑惑。群友回答说,你看看其原理就明白了。于是,搬运了此段文字。

npm是Node的模块管理器,功能极其强大,有了npm,我们只需一行命令,就能安装别人写好的模块。

1) npm install

npm install 命令用来安装模块到node_modules目录。

npm install <packageName>

安装之前,npm install 会先检查,node_modules目录之中是否已经存在指定模块。如果存在,就不再重新安装,即使远程仓库已经有了一个新的版本,也是如此。

如果你希望,一个模块不管是否按转过,npm都要强制重新安装,可以是用-f 或者 --force参数

npm install <packageName> --force
2) npm update

如果想更新已安装模块,就要用到npm update命令。

npm update <packageName>

它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装。

3) registry

npm update 命令怎么知道每个模块的最新版本呢?

答案是npm模块仓库提供了一个查询服务,叫做registry。 以npmjs.org为例,它的查询服务网址是 registry.npmjs.org/。

这个网址后面跟上模块名,就会得到一个 JSON 对象,里面是该模块所有版本的信息。比如,访问 registry.npmjs.org/react,就会看到 react 模块所有版本的信息。

$ npm view react

# npm view 的别名
$ npm info react
$ npm show react
$ npm v react

registry 网址的模块名后面,还可以跟上版本号或者标签,用来查询某个具体版本的信息。比如, 访问 registry.npmjs.org/react/v0.14… ,就可以看到 React 的 0.14.6 版。

返回的 JSON 对象里面,有一个dist.tarball属性,是该版本压缩包的网址。

dist: {
  shasum: '2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a',
  tarball: 'http://registry.npmjs.org/react/-/react-0.14.6.tgz' 
},

到这个网址下载压缩包,在本地解压,就得到了模块的源码。npm install和npm update命令,都是通过这种方式安装模块的。

5) 总结一下Node模块的安装过程

1.发出npm install命令

2.npm 向 registry 查询模块压缩包的网址

3.下载压缩包,存放在~/.npm目录

4.解压压缩包到当前项目的node_modules目录

【具体请看:www.ruanyifeng.com/blog/2016/0…