《Node.js简记》包管理器npm的安装、加速和常用指令

来源:互联网 发布:淘宝店多少单一颗心 编辑:程序博客网 时间:2024/06/05 18:35

前言:

上篇 《Node.js简记》 安装Node.js并实现Helloworld 我们已经完成了node开发环境的安装配置,接下来我们先来了解一下node的一个重要的工具——包管理器npm

npm安装和常用指令:

1.npm简介:

npm 是node的包管理工具,常用于一下场景:

  • 用户可从npm服务器获取别人编写的第三方包命令程序到本地使用;
  • 用户可上传自己编写的包或者命令程序到npm服务器给别人下载使用。

2.npm安装:

新版本的node安装的时候自动安装了npm,所以无需单独下载安装,检查是否安装成功可以通过如下指令:

$ npm -v3.10.10

3.npm常用指令:

<name> 是指定的node的依赖包或者模块名称,例如express等。

  • 安装指令:

    npm install <name>
  • 全局安装:

    npm install -g <name>

    这里比上条多了-g参数,是global的意思,指一次安装全局可用,但是只能在命令行中全局使用,不能用通过require的方式来调用全局包。例如:

    npm install -g hexohexo -v
  • 同步到Package.json的安装:

    npm install -s <name>

    假设项目路径下有Package.json这个文件,使用此指令安装包的时候,所安装包的信息会被同步写到Package.json中。反向的,假如项目中有Package.json文件,我们可以把当前项目使用到的依赖包信息都填写到其dependencies字段中,这样在项目目录中运行npm install就能把dependencies字段所有的依赖包都安装到本地,如此在提交代码到github上的时候,也不必将node_modules文件夹上传。

  • 初始化包管理:

    npm init

    执行这个指令会在项目目录下生成一个Package.json文件,这是包管理的配置文件,包含应用名称版本号依赖包等信息。

  • 移除指定已安装的包:

    npm remove <name>
  • 更新指定已安装的包:

    npm update <name>
  • 列出已安装的包:

    npm ls
  • 查询安装包的路径:

    npm root
  • 查询全局安装包的路径:

    npm root -g
  • 查询帮助项:

    npm help

    也可以专门查询指定指令的帮助信息:

    npm help install

4.npm加速:

由于npm默认的获取资源地址是国外的服务器,常常会出现速度慢而导致超时安装失败的错误,一般我们还是使用淘宝提供的cpm

npm install -g cnpmcnpm install express

查询是否安装成功:

linsh@ubuntu:/application/node/express_demo$ cnpm -vcnpm@4.5.0 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/parse_argv.js)npm@3.10.10 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)node@6.10.3 (/home/linsh/git/nvm/versions/node/v6.10.3/bin/node)npminstall@2.30.0 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)prefix=/home/linsh/git/nvm/versions/node/v6.10.3 linux x64 4.2.0-27-generic registry=https://registry.npm.taobao.org

加载模块(包):

我们都知道node模块化的特性非常突出,而且各种第三方的功能模块都能通过node的包管理器npm来获取,那么获取之后要如何引入到项目中呢?

1.required指令:

这就需要一个关键的指令require,这里我们以简单的以node内带的 http 模块为例:

var http = require("http");

加载的包可以分为内部包外部包,引入接口是一样的,加载顺序是:先从系统核心的模块中查找,再到当前项目的 node_modules 目录下查找。

2.node内置模块:

除了能够在服务端运行JavaScript之外,node本身也提供了诸如上述http之类的一系列功能模块,用于与操作系统的交互,主要有:

  • path:文件路径处理
  • fs:操作文件系统
  • child_process:新建子进程
  • util:其他实用的小工具
  • http:提供短连接Http服务器功能
  • url:用于解析URL
  • querystring:解析URL中的查询字符串
  • crypto:提供加密和解密功能
  • 其他

点击上述的模块名称可以查看对应的官方API

3.外部包的使用:

处理node核心自带的模块之外,其实在社区诞生了很多第三方的模块,这些模块通常都通过npm进行管理,假如要使用它们,步骤如下:

  • 下载包:
    首先,我们要先通过npm来获取外部包,在当前项目的目录下运行指令:

    npm install express

    假如之前并未安装过外部包,在项目目录下会多出一个 node_modules 的文件夹,用于存放外部的包。

  • 加载包:
    然后加载下载的外部包,加载包的方式其实与加载内部模块是一样的:

    var express = require("express");

通过npm install -g <modulename>全局安装的模块没办法通过此方式加载。

4.上传自己制作的包:

通过npm我们不止可以获取别人编写的模块,还能上传我们自己编写的模块,当然需要符合npm的规格,步骤如下:

  • 创建包管理文件package.json
    在命令行中定位到当前创建的包目录,输入npm init来生成包管理文件:

    E:\Node\projects\HappyWriter>npm initThis utility will walk you through creating a package.json file.It only covers the most common items, and tries to guess sensible defaults.See `npm help json` for definitive documentation on these fieldsand exactly what they do.Use `npm install <pkg> --save` afterwards to install a package andsave it as a dependency in the package.json file.Press ^C at any time to quit.name: (HappyWriter) happywriter # 模块名version: (1.0.0)description: writer editor       # 模块描述entry point: (index.js)test command: testgit repository:                 # Github 地址keywords: linshuheauthor: linshuhelicense: (ISC)About to write to E:\Node\projects\HappyWriter\package.json:    # 生成地址{  "name": "happywriter",  "version": "1.0.0",  "description": "writer editor",  "main": "index.js",  "scripts": {    "test": "test"  },  "keywords": [    "linshuhe"  ],  "author": "linshuhe",  "license": "ISC"}Is this ok? (yes) yes

    输入 yes ->回车,此时在当前项目目录下会生成一个package.json文件,内容为:

    {  "name": "happywriter",  "version": "1.0.0",  "description": "writer editor",  "main": "index.js",  "scripts": {    "test": "test"  },  "keywords": [    "linshuhe"  ],  "author": "linshuhe",  "license": "ISC"}

    Package.json 属性说明

    • name - 包名
    • version - 包的版本号
    • description - 包的描述
    • homepage - 包的官网 url
    • author - 包的作者姓名
    • contributors - 包的其他贡献者姓名
    • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
    • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上
    • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require(“express”)
    • keywords - 关键字
  • 在npm资源库注册用户:
    使用邮箱来注册用户

    $ npm adduserUsername: linshuhePassword:Email: (this IS public) linshuhe1@gmail.com
  • 发布和撤回模块:
    模块发布:

    npm publish

    撤回指定版本的模块:

    npm unpublish <package>@<version>
  • 版号控制:
    上述中在创建包管理文件的时候里面的字段version用来进行包的版号控制,包含三位整数:X.Y.Z,分别代表:主版本号、次版本号和补丁版本号,一下是更新版本号的原则:
    • 如果只是修复bug,需要更新Z位;
    • 如果是新增了功能,但是向下兼容,需要更新Y位;
    • 如果有大变动,向下不兼容,需要更新X位。

参考资料:

  • Node基础篇(模块和NPM)
  • npm常用命令
  • NPM 使用介绍