前端开发系列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开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
随机推荐
- 基于MCP实现text2sql
目的:基于MCP实现text2sql能力 参考:https://blog.csdn.net/hacker_Lees/article/details/146426392 服务器 选用开源的MySQL M ...
- Jmeter接口关联总结
1.新建测试计划 输入相关接口如下: 本文以接口A(Phone Login)和接口B(Get ticket)两个接口为例进行关联 这两个接口的关系是:先执行接口A获取token作为参数,然后执行接口B ...
- grequests,并发执行接口请求的方法(简易版)
有时候需要处理很多请求,显然,一个一个去处理是要花费很多时间的 我们就需要用到并发的方式,python并发请求的方法很多,从简单到复杂. 本案例,介绍一个超级简单,使用grequests库,实现并发请 ...
- DPDI(Dispatch PDI)kettle调度管理平台介绍
DPDI online产品简介 DPDI Online 是一款基于Kettle的强大在线任务调度平台,凭借其高效与灵活性,专为调度和监控Kettle客户端生成的ETL任务而设计 DPDI Online ...
- access vba实现OLE对象保存到本地
参考oletodisk的实现方法,更新为在64位office上野可以运行,函数模块代码如下: 1 Option Compare Database 2 Option Explicit 3 4 5 'DE ...
- ESP32S3 BLE_HID的编程实现
ESP32S3 BLE_HID的编程实现 BLE是低功耗蓝牙,HID是Human Interface Device,也就是人机接口设备. 主要用于无线连接并传输用户输入数据(如按键.触控.手势等). ...
- redis没有启动会报什么错???
以下是报错信息,应该是根据项目不同,具体的不太一样,但我们能清晰的看到一句 加红,加大,加粗 Caused by: redis.clients.jedis.exceptions.JedisConnec ...
- 4G模块——大夏龙雀DX-CT511-A使用记录
4G模块--大夏龙雀DX-CT511-A使用记录 加回车换行 115200波特率 重启: AT+RESET 6.关闭HTTP服务: AT$HTTPCLOSE 关闭网路 AT+NETCLOSE 1.TC ...
- JavaScript 没有“包”
前言 除了古老的 C/C++,几乎所有的编程语言都有模块系统,都有官方的包管理器.我们一般不自己实现所有的代码,实际应用开发过程中大量使用开源库和框架.这篇文章演示了如何把自己实现的库变成一个包,一个 ...
- vue3 基础-插件 plugin
前几篇我们介绍了 mixin 混入的的方式能实现对代码的复用, 而本篇将要介绍的 plugin 将会更加适合这种通用性功能的代码的复用和扩展. 最常用的场景, 比如轮播图就非常实用 plugin 来实 ...