如何使用NPM?CNPM又是什么?

时间:2019-08-21 20:06:14 类型:NodeJS
字号:    

  背景介绍

  什么是npm?

  npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等), NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,它是 Node 获得成功的重要原因之一。常见的使用场景有以下几种:

  允许用户从NPM服务器下载别人编写的第三方包到本地使用。

  允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

  允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

  由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装

  为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。

  更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

  什么是cnpm?

  因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,所以我们乐于分享的淘宝团队干了这事。来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”

  知识剖析

  npm install moduleNames:安装Node模块

  安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。

  node的安装分为全局模式和本地模式。

  一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。

  在全局模式下,Node包会被安装到Node的安装目录下的node_modules下

  为什么要保存至PACKAGE.JSON?

  因为node插件包非常大,版本庞杂,所以不加入package信息,模块间的依赖变得非常困难,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可(命令提示符执行npm install,则会根据package.json下载所有需要的包)。 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

  PACKAGE.JSON 属性说明:

  name - 包名。(不要把node或者js放在名字中)

  version - 包的版本号。

  dependencies - 项目运行所依赖的模块

  devDependencies - 项目开发所需要的模块

  bin - 这需要在你的package.json中提供一个bin字段,它是一个命令名和本地文件名的映射。在安装时,如果是全局安装,npm将会使用符号链接把这些文件链接到prefix/bin,如果是本地安装,会链接到./node_modules/.bin/

  npm常用命名

  使用npm卸载插件:npm uninstall < name > [-g] [--save-dev] PS:不要直接删除本地插件包

  使用npm更新插件:npm update < name > [-g] [--save-dev]

  更新全部插件:npm update [--save-dev]

  查看npm帮助:npm help

  查看当前目录已安装插件:npm list

  还有一些npm的简单命令就不多说了

  PS:npm安装插件过程:从http://registry.npmjs.org下载对应的插件包(该网站服务器位于国外,所以经常下载缓慢或出现异常),解决办法就是cnpm

  CNPM介绍:

  官方网址:http://npm.taobao.org

  安装:命令提示符执行npm install cnpm -g --registry=https://registry.npm.taobao.org

  注意:安装完后最好查看其版本号cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误

  PS:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。

  3.常见问题

  bower 和 npm有什么区别

  4.解决方案

  npm 是伴随 Node.js 出现的一个包管理器,最开始只能支持 Node.js 的模块管理,但是后来, npm 官网经过一次改版,打出的口号是,javascript 的包管理器,所以,其已经不在局限于是 Node.js 的模块管理了,已经通用到了所有 js 的包管理工具了,可以说,前后通吃了。

  bower 的话,从一开始,就是专门为前端表现设计的包管理器,一切全部为前端考虑的。npm 和 bower 的最大区别,就是 npm 支持嵌套地依赖管理,而 bower只能支持扁平的依赖(嵌套的依赖,由 程序员自己解决)。

  嵌套依赖,指的就是,你依赖的软件包,还有它自己的依赖,好像摘葡萄,一摘一大串。在服务器环境的时候,这并没什么关系,因为存储空间够大,一切代码都是本地运行,只要解决完依赖就行了, 但是到了用户产品的浏览器里,就很成问题了,你不能让用户去下载好几M的js代码,那就太糟糕了。在这个情况下,就需要程序员自己手动解决用到的类库的嵌套依赖问题。比如确保各种各样的插件 都依赖同一个版本的jQuery。

  扩展思考

  cnpm有哪些问题?

  1.cnpm 的仓库只是 npm 仓库的一个拷贝,它不承担 publish 工作,所以你用 cnpm publish 命令会执行失败的

  2.不仅是 publish 会执行失败,其它的需要注册用户(npm adduser)、或者修改 package 状态等命令都无法用 cnpm

  作者:没事儿啊

  链接:https://www.jianshu.com/p/f581cf9360a2

  来源:简书

  简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。