官网:https://www.npmjs.cn/前端
npm是JavaScript的包管理器,也是世界上最大的软件注册中心。vue
NPM是随同NodeJS一块儿安装的包管理工具,包的结构使您可以轻松跟踪依赖项和版本。node
NPM能解决NodeJS代码部署上的不少问题,常见的使用场景有如下几种:
容许用户从NPM服务器下载别人编写的第三方包到本地使用。
容许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
容许用户将本身编写的包或命令行程序上传到NPM服务器供别人使用。react
现代化前端开发中,须要用到不少别人写好的模块包。若是咱们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用的话很是繁琐。因而一个集中管理的工具应运而生。你们都把本身开发的模块打包后放到npm官网上,若是要使用,直接经过npm安装就能够直接用,不用管代码存在哪里,应该从哪里下载。
更重要的是,若是咱们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm能够根据依赖关系,把全部依赖的包都下载下来并管理起来。不然,靠咱们本身手动管理,确定既麻烦又容易出错。webpack
在安装了 node 以后,就可使用 npm 命令了。web
在当前目录中生成package.json 文件(项目描述文件)npm
$ 没有别的意思,表明这些代码是终端运行的json
$ npm init
$ npm init -y
两者均可以初始化生成package.json配置文件gulp
npm init 会有不少提问让你输入当前配置项bootstrap
npm init -y 直接跳过全部提问,生成默认的配置项
生产依赖包指的是无论在开发时仍是上线以后项目都须要使用到的。好比 jQuery、bootstrap、lodash 等。
//默认安装最新版本 $ npm install 包名 //安装指定版本 version版本,好比 npm install gulp@3.9.1 $ npm install 包名@ <version> //安装指定的tag版本 $ npm install 包名@ <tag>
开发依赖包指的是仅在开发过程当中须要使用到的。好比 gulp、webpack、nodemon 等工具类型的依赖包。
//默认安装最新版本 $ npm install 包名 --save-dev //安装指定的版本 $ npm install 包名@<version> --save-dev //安装指定的tag版本 $ npm install 包名@<version> --save-dev
//更新所有依赖包 $ npm update //更新指定的依赖包 $ npm update 包名
来举个栗子.
$ npm i gulp@3.9.1 -D
注意:更新依赖包时会根据 package.json 文件中依赖包的前缀符号作不一样处理**
这里咱们安装了gulp@3.9.1的版本,而后使用npm update 更新依赖包,发现了一个问题,咱们目前的gulp版本应该是4.0.2的版本,为何没有升级呢?
先了解下版本号的小知识
来个问题,当前gulp3.x的最新版本是3.9.1 ,若是咱们安装的是3.8.x,而后npm update gulp 时,能更新吗?
答案是:能
还有个问题:package.json中的依赖包版本号前面有个^和~表明什么意思?
二者的相同点,都是为了处理如何更新的问题
区别是:
^ 锁定主版本,更新到最新的次版本+修订版
^ 3.8.11 => 3.9.1
~ 锁定主版本与次版本,更新到最新的修订版
~ 3.8.0 => 3.8.11
另外,除版本号以外还有些修饰的词,咱们在使用软件中也常常见到
除了版本号以外还有一些修饰的词,好比:
经过版本号小知识,咱们就能够知道,为何上面gulp版本没有升级到4.0.2的版本了,由于更新版本是不会更新到主版本 的,由于4.x的版本以后,作了不向下兼容的更新,担忧当前项目相关的gulp,跑不起来,npm也怕这种状况发生,就对咱们的版本作了锁定,因此更新不了.
项目的依赖包是存放在项目的 node_modules 文件夹中的,项目依赖多的时候,这个文件夹会很是大。版本管理时都会忽略这个文件夹。
项目克隆下来以后,若是按照 package.json 中的依赖项一个一个手动去安装,将很是费时费力。
这时能够直接使用 npm install 命令。它会依据 package.json 将所有依赖都安装好。
$ npm install
全局通常安装的是一些工具类型的。好比 nodemon、live-server、gulp、webpack、@vue/cli、create-react-app 等
$ npm install 包名 -global
能够缩写为 npm i 包名 -g
能够这样解决:
//卸载当前项目下的 $ npm uninstall 包名 //卸载全局的 $ npm uninstall 包名 -g
//若是报错-4048时使用
$ npm cache verify
下载第三方依赖包时默认是从国外的服务器下载的。因为种种缘由,下载的速度不尽如意。
这时能够采用淘宝的镜像源。
$ npm config get registry
$ npm config set registry 源地址
*. 淘宝镜像源地址:https://registry.npm.taobao.org/
*. 默认源地址:https://registry.npmjs.org/
C:\Users\xx用户.npmrc
有时候咱们须要经过各类命令来启动项目或者作其余的事情,好比说:
nodemon index.js --hello --world --abc --ejg (随意写的长命令,举个栗子而已)
若是咱们每次启动,去在终端写这样的命令,确定是不明智的,这时就可使用npm脚本
{ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "hello":"node index.js" } }
script中每一个键值对就是一个脚本命令,key是脚本名,value是这个脚本的操做
上面全部介绍的是npm包资源管理器的基础操做,下面总结下命令:
生成 package.json 配置文件 $ npm init $ npm init -y 跳过全部提问 安装包 本地安装(当前项目能访问到) $ npm install 包名 全局安装(其余项目都能访问到) $ npm install 包名 -global 缩写形式 $ npm i 包名 -g 项目依赖(添加到dependencies) $ npm install 包名 -save 项目上线须要用到的包,缩写 $ npm install 包名 -S (大写) 开发依赖(添加到devDependencies) $ npm install 包名 --save-dev 开发测试须要用到的包,缩写 $ npm install 包名 -D (大写) 移除依赖模块 $ npm uninstall 包名 -save $ npm uninstall 包名 --save-dev 清除缓存数据 npm cache verify 如报错 -4048 时使用 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org $ npm install 包名 -D (大写) 移除依赖模块 $ npm uninstall 包名 -save $ npm uninstall 包名 --save-dev 清除缓存数据 npm cache verify 如报错 -4048 时使用 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org