Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

npm 常用命令 #3

Open
Borkes opened this issue Jun 5, 2017 · 1 comment
Open

npm 常用命令 #3

Borkes opened this issue Jun 5, 2017 · 1 comment

Comments

@Borkes
Copy link
Owner

Borkes commented Jun 5, 2017

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> <packageName>

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

3.npm更新和配置

  • npm查看模块信息

     npm view koa
     npm v koa
     npm info koa
     npm list koa   //查看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 <package>  //打开模块的主页
    npm repo <package>  //打开一个模块的代码仓库

通过上的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 <name>
    npm config set init.author.email <email>

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

    npm config set prefix <dir>

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

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

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

    npm run <key> 

来执行,例如:

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

等同于 npm mocha --harmony test。

4.npm 模块发布

npm adduser  //注册用户
npm whoami  //查看当前登录用户
npm login   登录
npm publish  在当前环境下发布模块  

file-csv,是我发布的一个模块

npm unpublish  撤销发布过的某个版本

更新包:
x: 主版本号,通常有重大改变或者达到里程碑才改变;
y: 次要版本号,或二级版本号,在保证主体功能基本不变的情况下,如果适当增加了新功能可以更新此版本号;
z: 尾版本号或者补丁号,一些小范围的修修补补就可以更新补丁号.

$ npm version patch <=> z++
$ npm version minor <=> y++ && z=0
$ npm version major <=> x+= && y=0 && z=0
$ npm publish

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

@Borkes
Copy link
Owner Author

Borkes commented Jul 4, 2017

npm 安装出现没有权限的情况:electron-userland/electron-prebuilt#48
sudo npm install -g electron --unsafe-perm=true --allow-root
也可以修改权限,使得下载是可以直接others有权限node install.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant