npm包管理器
包管理器 Node Package Manager:
1类:本地开发使用的包 (devDependencies),如:gulp
2类:项目依赖包 (dependencies),如:jquery
升级NodeJS: 这里使用n来管理node版本,更受欢迎的是使用nvm来管理:http://www.cnblogs.com/fanlinqiang/p/7741217.html
npm i n -g
n stable //升级到最新版本
nv0.12.2 //升级到指定版本
注:n模块是专门用来管理nodejs版本的
注:windows下升级npm: npm install npm@latest -g
注:windows下升级node:下载指定版本 .msi 文件,安装到历史安装目录,即完成版本更新
(附带最新版的npm, 可通过命令:where node,查看当前node的安装目录)。
初始化(生成package.json ,即npm脚本):
npm init
注:参数 -y 初始化过程中一路绿灯(一路yes)
安装包:
npm install [包名] //例如:npm install gulp
注:install可简写为 i
注:参数 --global 简写 -g ,全局安装,,默认为装在本地
注:参数 --save-dev 简写 -D,开发依赖包,写入package.json中的devDependencies
注:参数 --save 简写 -S,项目上线依赖包,写入package.json中的dependencies
# 只安装生产环境(dependencies)包: npm i --product # 卸载包: npm remove | uninstall [包名] 注:参数 --global 全局卸载,简写 -g #查看包信息: npm info [包名] #安装具体某个版本包: npm i [包名]@[版本号] -D //例:npm i gulp@3 -D npm i gulp@2.7 -D #查看已安装的包及其依赖包结构: npm ls #查看指定已安装包及其依赖 npm list | grep [包名] #查看已过期的包: npm outdated [包名] 注:包名可为空 #更新已安装包到最新版本: npm update #登录npm npm login #发布包 npm publish
执行package.json中自定义的脚本scripts:
如:
npm run iu
#更新npm至最新版本:
npm install -g npm
#清除缓存:
npm cache clean
注: package.json中的版本号控制中的 ^ 表示保证第一位为锁定,其他位为最新版本,
如:当package.json,记录gulp为^1.7.2而最新版本为1.8.5,则init时会下载1.8.5
~保证前两位为锁定,如:~1.7.2 (常用)
*保证最新版本,如: *
不带任何符号,只有版本号,如:1.7.2,则构建时只会下载对应的版本号 (常用)
注:packge.json中的name是发布包时的唯一标识,因此不能重复
nrm
nrm 是一个管理 npm 源的工具。用过 ruby 和 gem 的同学会比较熟悉,通常我们会把 gem 源切到国内的淘宝镜像,这样在安装和更新一些包的时候比较快。nrm 同理,用来切换官方 npm 源和国内的 npm 源(如: cnpm),当然也可以用来切换官方 npm 源和公司私有 npm 源。
全局安装 nrm:
npm i nrm -g
查看当前 nrm 内置的几个 npm 源的地址:
$ nrm ls
* npm ---- https://registry.npmjs.org/ cnpm --- http://r.cnpmjs.org/ eu ----- http://registry.npmjs.eu/ au ----- http://registry.npmjs.org.au/ sl ----- http://npm.strongloop.com/ nj ----- https://registry.nodejitsu.com/
nrm test 测试各个源速度
nrm use cnpm 切换源
使用淘宝镜像:http://npm.taobao.org/
方案一(推荐):使用cnpm代替npm,并指定其源为淘宝镜像
npm install cnpm -g --resgistry=https://resgistry.npm.taobao.org
之后安装都可使用cnpm代替npm ,如:
cnpm install gulp
方案二:在安装时可以手动指定从哪个镜像服务器获取资源,使用阿里巴巴在国内的镜像服务器
npm install -gd express --registry=http://registry.npm.taobao.org
只需要使用–registry参数指定镜像服务器地址,为了避免每次安装都需要--registry
参数,可以使用如下命令进行永久设置:
npm config set registry http://registry.npm.taobao.org
注:cnpm与npm还是有区别的,使用npm安装会附带一些其他信息,如使用 npm ls命令时
npm install 生成的package-lock.json是什么文件?有什么用?
package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json. It describes the exact tree that was generated, such that subsequent installs are able to generate identical trees, regardless of intermediate dependency updates.
大概意思是:package-lock.json是当 node_modules 或 package.json 发生变化时自动生成的文件。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。
错误记录:
一、使用npm安装sudo npm install weex-toolkit -g报错,使用chmod -R 777 /Users/linqiang/.nvm/versions/node/v10.8.0/lib/node_modules 无效...
后使用cnpm install weex-toolkit -g
npm ERR! path /Users/linqiang/.nvm/versions/node/v10.8.0/lib/node_modules/weex-toolkit/node_modules/acorn npm ERR! code ENOENT npm ERR! errno -2 npm ERR! syscall access npm ERR! enoent ENOENT: no such file or directory, access '/Users/linqiang/.nvm/versions/node/v10.8.0/lib/node_modules/weex-toolkit/node_modules/acorn' npm ERR! enoent This is related to npm not being able to find a file. npm ERR! enoent npm ERR! A complete log of this run can be found in: npm ERR! /Users/linqiang/.npm/_logs/2018-08-07T02_35_27_880Z-debug.log