npm

npm

1.npm介绍

npm是node中的一个模块管理器,用来安装和管理node模块,npm不需要单独安装,在安装完node会安装对应版本的npm。但是node没有升级,npm可能不是最新的,可以通过npm本身来安装自己:

    npm install npm@latest -g

@后面跟的是版本号,latest表示安装最新版本,-g是全局安装。
在linux中通过man命令来查看手册,不过安装玩node后,man命令可以查到node的手册,但是查不到npm,是因为安装的是node,默认把node的man查看手册加入到了配置文件但是没有加npm。npm使用可以通过以下两个命令来查看:

    npm help
    npm -l   //效果和man一样

2.npm安装模块

  • 初始化项目

    npm init
    

这个命令可以加两个参数,-f(force) 强制初始化,-y(yes)跳过提问阶段,使用默认值来生成package.json。
如果不用参数,会有初始化的一些提问,包括name,version,description,entry point,test command,git,keywords,license等,最后会生成package.json文件,这个文件就是用来记录项目所用到的依赖模块,用npm安装时可以把模块名称加入到这里,发布的时候供他人使用时不需要node_modules,有这个package.json可以自行安装。

  • 模块安装

    npm install
    npm install koa         //默认安装最新koa模块
    npm install [email protected]   //安装指定版本
    npm install koa --save  //安装后在package.json中dependencies属性中写入安装的版本信息
    npm install koa --save-dev  //安装后在packag.json中devDependencies属性中写入安装版本信息
    

这个命令不带参数是根据当前项目的package.json安装所有的模块,当你下载别人发布的项目时,根据package.json来安装模块。
后面还可以跟模块名称来安装模块。–save安装的一般是生产环境用到的模块,可以简写为 -S,–save-dev安装的一个是测试环境
可以简写为-D。安装之后在项目跟目录下会生成一个node_modules的文件夹,这里存放安装的模块已经模块的依赖,新版npm(具体多新不清楚)
安装的时候不在是递归安装,而是平行安装,所以安装一个模块在node_modules文件里面会有一堆文件夹,这样做一是为了模块复用,二是为了
使得模块路径变短,文件名过长在windows里面无法删除。

  • ‘离线安装’
    在用户主目录下有一个.npm的目录:

    npm config get cache
    

$HOME/.npm ,这个目录保存着大量文件,是npm intall时下载的压缩包,如果用不到可以用以下命令清空

    rm -fr ~/npm/*   //不建议用这个rm -fr 很危险
    npm cache clean

npm install的时候只会检查本地的node_modules目录,并不会检查这个目录,这样每次安装模块都会从远程registry下载,
对于不是全局安装的模块,多个项目就会重复安装,为了解决这个npm提供了一种方式:

    npm install --cache-min 

本地缓存时间超过time的模块才会从registry下载,这个其实也不算是离线安装,还是需要联网对比是否需要重新下载。
如果模块不在缓存目录中,那么还是会连接registry下载最新版本,如果安装模块在缓存中,且下载版本在指定范围内,则使用
缓存模块,如果缓存版本不满足下载版本会报错。

3.npm更新和配置

  • npm查看模块信息

    npm view koa
    npm v koa
    npm info koa
    npm show koa
    npm v koa version  //查看koa目前的版本
    npm -v          //查看npm自己的版本
    npm search /^req/  //search搜索npm库,后面可以用string或者正则表达式
    

用以上命令可以查看目前某个模块详细的信息,也可以增加参数来查看具体的信息。在更新的时候,或者需要对比版本信息的时候
就需要用到这些命令。如果要查看模块的文档可以通过 https://npmjs.org/package/模块名称 来查看,这里有介绍,
版本号,最后更新时间,模块源码链接,bug链接,README页面。也可以查看模块代码库:

    npm home   //打开模块的主页
    npm repo   //打开一个模块的代码仓库

通过上的npm可查看具体的某个模块的版本,如果要更新模块,需要查看所有本地模块和目前模块版本的对比,然后选择性更新

    npm outdated //检查当前模块依赖

它会输出当前版本(current version)、应当安装的版本(wanted version)和最新发布的版本(latest version)
列出当前项目所用到的模块:

    npm list
    npm list -g
  • 更新

    之前提到了一个版本范围,同时在package.json里面也会看到 ~,^,* 等符号,package.json中的版本:大版本.次要版本.小版本

  • 指定版本:比如1.2.2
  • 波浪号+版本:比如~1.2.2 ,安装1.2.x最新的版本(不低于1.2.2),但不要安装1.3.x,安装时不改变大版本和次要版本
  • 插入号+版本:比如^1.2.2 ,安装1.x.x最新的版本(不低于1.2.2),但不要安装2.x.x,安装不改变大版本号。
  • latest:安装最新的版本

知道了模块信息和版本,可以选择更新,也可以全部更新

    npm update package  //更新指定模块
    npm update package -g //全局更新

有时候可能更新不成功,可能于版本有关,不过不用去纠结,可以安装指定最新的版本,或者卸载现在的模块重新安装

    npm uninstall package //卸载指定模块
    npm uninstall package -g //下载全局安装的模块
  • 配置
    大家可能遇到过这样的情况,用npm安装一个模块的时候会出现超时的错误,或者说在公司内网,由于防火墙的限制无法安装
    这时候就需要对npm做一下简单的配置。
    之前我们提到在主目录下有一个 .npm 的缓存目录,其实在主目录下还有一个npm的配置文件 .npmrc

    npm config list [-l]  //查看npm的配置
    npm config edit    //编辑npm的配置,当然也可以直接编辑~/.npmrc
    

在这个配置文件中有很多信息, npm init 的时候也是根据这个文件来初始化的。打开这个配置文件,一般会看到
save-exact = true ,这个配置是在安装模块写入package.json的时候是确定的版本,不是版本范围。

    npm config set init.author.name 
    npm config set init.author.email 

上面设置的作者和邮箱,在配置文件中是可以看到的,同时初始化的时候会默认用这两个参数。一般全局安装的模块是
/usr/local/lib/,这个一般用户没有权限写入,可以设置一个模块的全局安装目录让普通用户也有写入的权限。

    npm config set prefix 

回到开始提到的无法安装模块的问题,这时需要设置一个代理或者搭建镜像

    npm config set proxy https://proxy.com/  //设置设置的代理是公司自己的代理
    npm config set registry https://registry.npm.taobao.org  //这里用的是淘宝的镜像

设置这些后一般情况是可以正常下载的,不过在publish的时候需要删掉。或者有一个模块 cnpm 也可以从国内源下载模块。
最后说一点,在package.json中有一个script的字段,这里设置了可以执行的脚本。里面是的key,可以通过

    npm run  

来执行,例如:

    "scripts": {
            "test": "mocha --harmony test"
     }
     npm run test  //执行脚本

等同于 npm mocha –harmony test。

参考:
http://javascript.ruanyifeng.com/nodejs/npm.html
http://www.ruanyifeng.com/blog/2016/01/npm-install.html
https://github.com/ericdum/mujiang.info/issues/6/
http://www.cnblogs.com/jingmoxukong/p/6228358.html

你可能感兴趣的:(js工作笔记)