前端开发系列080-Node篇之cnpm
一、简单介绍
CNPM是阿里的Node团队开发的一款NPM工具,由蚂蚁金服Node技术专家苏千(袁锋·Node技术专家)和死马(何翊宇·Node技术专家·koa.js和egg.js框架核心维护者)主导,内核使用了自主研发的npminstall实现。CNPM依托于淘宝NPM镜像,在国内能够更快速的进行包和依赖的安装。
在淘宝NPM镜像网站上面有关于镜像的说明:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步”。
也就是说,我们在管理和安装包的时候使用淘宝NPM镜像跟直接使用npm来进行安装的资源其实是相同的,因为国内网络环境的原因,我们直接使用淘宝NPM镜像来下载包速度会更快一些。
二、基本使用
$ npm install -g cnpm 全局安装CNPM
$ npm install -g cnpm - -registry=https://registry.npm.taobao.org 全局安装CNPM并切换源
注意 在命令行工具中执行上面命令的时候--中间没有空格。
在全局安装CNPM的时候如果切换了源,将会从Registry.npm.taobao.org来安装模块。当安装的时候如果发现安装的模块还没有同步过来, 那么淘宝NPM会自动在后台进行同步, 并且会让你从官方NPM Registry.npmjs.org进行安装. 当下次再安装这个模块的时候则直接从淘宝NPM安装。
$ cnpm -v 查看cnpm的版本信息
CNPM支持 npm 除了 publish 之外的所有命令,而且这些命令的使用方式和npm完全一致。
这里简单列出上面几个命令的执行演示。
wendingding$ npm install cnpm -g --registry=https://registry.npm.taobao.org
npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6
to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0
/usr/local/bin/cnpm -> /usr/local/lib/node_modules/cnpm/bin/cnpm
+ cnpm@6.0.0
added 12 packages, removed 8 packages and updated 58 packages in 29.841s
wendingding$ cnpm -v
cnpm@6.0.0 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js)
npm@6.4.1 (/usr/local/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)
node@8.9.3 (/usr/local/bin/node)
npminstall@3.16.0 (/usr/local/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)
prefix=/usr/local
darwin x64 17.4.0
registry=https://registry.npm.taobao.org
wendingding$ cnpm install jquery
Installed 1 packages
Run 0 scripts
All packages installed (1 packages installed from npm registry,
used 624ms(network 622ms), speed 660.5kB/s, json 1(5.19kB), tarball 405.64kB)
dingding:cnpm wendingding$ cnpm install -g jquery
Downloading jquery to /usr/local/lib/node_modules/jquery_tmp
Copying /usr/local/lib/node_modules/jquery_tmp/_jquery@3.3.1@jquery
to /usr/local/lib/node_modules/jquery
Installing jquery's dependencies
to /usr/local/lib/node_modules/jquery/node_modules
All packages installed (used 4ms(network 2ms), speed 0B/s, json 0(0B), tarball 0B)
$ cnpm sync xxx 同步指定的模块。
CNPM还支持同步模块,只需要使用sync命令即可,下面列出同步模块命令的执行细节。
wendingding$ cnpm sync jquery
Start sync ["jquery"].
sync jquery, PUT https://registry.npm.taobao.org/jquery/sync?publish=false&nodeps=false
logurl: https://npm.taobao.org/sync/jquery#logid=6065624
[2018-11-27 10:16:56]
user: anonymous, sync jquery worker start, 1 concurrency,
nodeps: false, publish: false, syncUpstreamFirst: false
[2018-11-27 10:16:56] ----------------- Syncing jquery -------------------
[2018-11-27 10:16:56]
[c#0] [jquery] package(https://r.cnpmjs.org/jquery) status: 200,
dist-tags: {"beta":"3.3.1","latest":"3.3.1"},
time.modified: 2018-01-20T17:27:17.000Z, unpublished: null, start...
[2018-11-27 10:16:56] [jquery] found 0 missing star users
[2018-11-27 10:16:56] [jquery] all versions are exists
[2018-11-27 10:16:56] [jquery] no versions need to deleted
[2018-11-27 10:16:56] [jquery] all 383 npm users exists
[2018-11-27 10:16:56] [c#0] [jquery] synced success, 0 versions:
[2018-11-27 10:16:56] ----------------- Synced jquery success -------------------
[2018-11-27 10:16:56] [done] Sync jquery package finished, 1 success, 0 fail
Success: [ jquery ]
Fail: [ ]
Sync all packages done, successed: ["jquery"], failed: []
三、番外篇
我们使用CNPM的主要原因在于它在处理包的时候速度更快,很多人认为它的可取之处仅在于使用了国内的镜像,其实就算不用国内的镜像,CNPM的安装速度相对NPM也要更快一些。这是因为CNPM在处理的时候会把一些包缓存到node_module/.npminstall目录下,再以符号链接的方式将依赖目录链接到其对应的路径,这样做的好处是相同版本的包在安装的过程中实际上只有一份实体。
CNPM截止本文最新的版本6.0.0,在目录结构和依赖支持方面它的4.2以及4.3+版本是比较重要的一个分水岭。在4.2的版本里,它的目录结构和NPM 2保持一致,是嵌入式的结构。后来因为NPM 3的原因导致很多前端以及部分Node依赖在NPM 2下无法正常工作。
因此,在4.3版本中CNMP为前端开发者加入了扁平化的支持,即后期的版本中除按照嵌入式目录结构安装依赖外,还会顺便将计算得到的依赖(依赖 、依赖的依赖或者是依赖的特定版本)存放一份到node_moudles目录下,不过这也导致>node_moubles下目录成群···
前端开发系列080-Node篇之cnpm的更多相关文章
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- 旨在脱离后端环境的前端开发套件 - IDT Server篇
IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...
- cesium-webpack 入门开发系列一初探篇(附源码下载)
前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...
- openlayers4 入门开发系列之风场图篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列之热力图篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
随机推荐
- github仓库的README文件在线预览视频
1. 新建一个 issue ,在 issue 里面上传 mp4 视频文件(有限制,不能超过10MB) 上传超过10MB的视频会提示报错 2. 拿到视频文件的上传地址 3. 将这个地址直接贴到 READ ...
- Rust实战系列-深入理解数据
本文是<Rust in action>学习总结系列的第五部分,更多内容请看已发布文章: 一.Rust实战系列-Rust介绍 二.Rust实战系列-基本语法 三.Rust实战系列-复合数据类 ...
- 用DevEco Studio增量补丁修复功能,让鸿蒙应用的调试效率大增
在鸿蒙应用开发的快节奏赛道上,每一秒的开发效率提升都至关重要.如何更快地看到代码更改后的效果?如何尽可能缩短开发.调试和验证的周期?如何做到在某大厂180万行+项目中将代码修改即时生效?这些问题在De ...
- 2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了!
2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了! "LikeAdmin Java是基于Spring Boot + Mybatis Plus + Vue 3的快速开发平台, ...
- 各式各样的console
目录 知乎的console 百度的console B站的console 知乎的console 我很喜欢hire的文字样式. _____ _____ _____ _____ /\ \ /\ \ /\ \ ...
- 《原型设计工具深度解析:Axure到墨刀的实战指南》
原型设计工具深度解析:从Axure到墨刀的实战应用 项目背景 "Shou学"作为信息学院本科必修课指南平台,需通过高保真原型实现课程导航.知识点拆解.习题模拟等核心功能.本文结合& ...
- 代理模式-Proxy(动态代理)
代理模式(Proxy) 一.作用 又叫"动态代理" 为其他对象提供一种代理以控制对这个对象的访问 二.结构图 三.场景1 远程代理: 也就是为一个对象在不同的地址空间提供局部代表. ...
- Nginx No, Traefik Yes
As we all know, Nginx is a very popular reverse proxy server. It is very stable and has a lot of fea ...
- 提高Flutter应用性能的最佳实践
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- B1041 考试座位号
每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...