node 和 npm 简介

2017/08/03

node 和 npm 简介

node

Windows 安装 node

  •  在 Node.js 官网 下载 node. 一般我们选择 LTS 版本的, 因为这个相对稳定一些
  • 先在电脑创建 D:\nodejs 目录,并将 Node 安装在这个目录中,前辈说装在 C 盘会有权限的问题. 该引导步骤会将 node.exe 文件安装到你指定目录下,并将该目录添加进 PATH 环境变量
  • 安装好之后,在 cmd 控制台输入:node -v,控制台打印出版本表示安装成功。
  • 由于新版的 nodejs 已经集成了 npm,所以 npm 也一并安装好了。同样可以使用 cmd 命令行输入:npm -v 来测试是否成功安装。出现版本提示表示安装成功。

配置 node

  • 我们要先配置 npm 的全局模块的存放路径以及 cache 的路径,例如我希望将以上两个文件夹放在 Nodejs 的主目录下,便在 Nodejs 下建立 node_globalnode_cache 两个文件夹。如下图:
  • 启动 cmd,输入:
    • npm config set prefix "D:\nodejs\node_global"
    • npm config set cache "D:\nodejs\node_cache"
    • 后面的路径根据自己实际位置替换

安装全局模块

  • 先在全局安装一个 express:npm install express --global,可以简写为 npm install express -g
  • 关闭 cmd,打开系统对话框,“我的电脑”右键“属性”-“高级系统设置”-“高级”-“环境变量”。如下图:
  • 进入环境变量对话框,在系统变量下新建 NODE_PATH,输入 D:\nodejs\node_global\node_modules。(ps:这一步相当关键。)
  • 由于改变了 module 的默认地址,所以上面的用户变量都要跟着改变一下(用户变量 PATH 添加一个 D:\nodejs\node_global),要不使用 module 的时候会导致输入命令出现 xxx不是内部或外部命令,也不是可运行的程序或批处理文件 这个错误。
  • 以上步骤都 OK 的话,我们可以再次开启 cmd 命令行,进入 node(输入 node,回车) ,输入 require('express') 来测试下 node 的模块全局路径是否配置正确了。正确的话 cmd 会列出 express 的相关信息。如下图(如出错一般都是 NODE_PATH 的配置不对,可以检查下)。  
  • 补充说明:

    所有命令都是 -g 进行全局安装的,这样安装的安装包都在当前用户下,在磁盘的所有其他地方都可以访问到,比较方便。否则安装在当前目录下,只能在当前目录下使用。

列出所有全局模块

通过 npm list -g 可以列出所有已经安装的全局模块

F:\>npm list -g
D:\nodejs\node_global
+-- express@4.15.3
| +-- accepts@1.3.3
| | +-- mime-types@2.1.16
| | | `-- mime-db@1.29.0
| | `-- negotiator@0.6.1
| +-- array-flatten@1.1.1
| +-- content-disposition@0.5.2
| +-- content-type@1.0.2
  ........................
`-- less@2.7.2
  +-- errno@0.1.4
  | `-- prr@0.0.0
  +-- graceful-fs@4.1.11
  +-- image-size@0.5.5
  +-- mime@1.3.6
  +-- mkdirp@0.5.1
  | `-- minimist@0.0.8
  +-- promise@7.3.1
  ........................

但是,得到的输出信息会很冗长,我们可以加上 --depth=0 来精简一下输出

F:\>npm list -g --depth=0
D:\nodejs\node_global
+-- express@4.15.3
`-- less@2.7.2

现在输出信息就清楚了。我们只列出了我们安装的模块和版本号

基于 node 工程

包(项目,工程)

概念

  1. 在 Node.js 语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象。
  2. 包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。
  3. Node.js 根据 CommonJS 规范实现了包机制,开发了 npm 来解决包的发布和获取需求。

包的说明文件(package.json)

使用 package.json 能干什么

1. 相当于你本地项目的一个文档说明。
2. 允许你指定你项目中所使用的node包的版本。
3. 构建你的项目更加容易,便于给其他人共享。

package.json 属性详解

  • 本质:json 对象

    {
          "name": "npm_command", // 包名, 全部小写,没有空格,可以使用下划线或者横线
          "version": "1.0.0", // 版本, x.x.x 的格式, 符合“语义化版本规则”
          "scripts": { // 配置 npm 运行命令
              "start": "node bin/www"
          },
          "dependencies": { // 运行依赖的包
              "jquery": "^3.2.1"
          },
          "devDependencies": { // 开发依赖的包
              "babel": "^6.23.0"
          }
    }
    
  • 其他内容:

    description:描述信息,有助于搜索
    main: 入口文件,一般都是 index.js
    scripts:支持的脚本,默认是一个空的 test
    keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
    author:作者信息
    license:默认是 MIT
    bugs:当前项目的一些错误信息,如果有的话
    
  • 我们可以为 init 命令设置一些默认值,比如:

      npm set init.author.email "lhajh@qq.com"
      npm set init.author.name "lhajh"
      npm set init.license "MIT"
    
  • Semantic versioning(语义化版本规则): dependencies 的内容,以 "weex-HTML5": "^0.3.2" 为例,我们知道 key 是依赖的包名称,value 是这个包的版本。那版本前面的 ^ 或者版本直接是一个 * 是什么意思呢? 这就是 npm 的 Semantic versioning,简称 Semver,中文含义即“语义化版本规则”。 如果一个项目打算与别人分享,应该从 1.0.0 版本开始。以后要升级版本应该遵循以下标准:
    • 补丁版本:解决了 Bug 或者一些较小的更改,增加最后一位数字,比如 1.0.1
    • 小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0
    • 大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0
  • 作为使用者,我们可以在 package.json 文件中写明我们可以接受这个包的更新程度(假设当前依赖的是 1.0.4 版本):
    • 如果只打算接受补丁版本的更新(也就是最后一位的改变),就可以这么写:
      • 1.0
      • 1.0.x
      • ~1.0.4
      • 波浪线可以管理三级版本
    • 如果接受小版本的更新(第二位的改变),就可以这么写:
      • 1
      • 1.x
      • ^1.0.4
      • 向上的尖括号可以管理二级,三级版本
    • 如果可以接受大版本的更新(自然接受小版本和补丁版本的改变),就可以这么写:
      • *
      • x
  • npm(包管理工具) - 详述:
    1. Node 包管理器(npm)是一个由 Node.js 官方提供的第三方包管理工具,
    2. npm 是一个完全由 JavaScript 实现的命令行工具,通过 Node.js 执行,因此严格来讲它不属于 Node.js 的一部分。
    3. 在最初的版本中,我们需要在安装完 Node.js 以后手动安装 npm。但从 Node.js 0.6 开始,npm 已包含在发行包中了,安装 Node.js 时会自动安装npm。现在的版本大都使用 6.0 以上。。。

npm 命令详解

  • npm 命令详解 - 使用 npm 命令来下载依赖模块及对项目包(模块)进行管理 - 常用命令:
    • npm init: 生成 package.json
    • npm init –yes(简写:npm init -y): 跳过回答问题步骤,直接生成默认值的 package.json 文件。使用此方法时,文件夹名字必须符合 package.json 的 name 命名规范
    • npm install:用来安装 package.json 里的相关依赖包(dependencies 和 devDependencies 里的所有模块)
    • npm install –production:只安装 dependencies 中的内容
    • npm install packageName –global(简写:npm i -g packageName):全局安装
    • npm install packageName –save(简写:npm i -S packageName):局部安装运行依赖
    • npm install packageName@version –save:安装指定版本的包(局部安装)
    • npm install packageName –save-dev(简写:npm i -D packageName):局部安装开发依赖
    • npm info packageName (显示包的信息)
    • npm rm packageName –save (移除包并删除依赖)
    • npm config get prefix (获取全局安装包的所在地址,并且可见对应的 cmd 命令)
    • npm outdated:检查依赖的包是否有新版本
    • npm update packageName:更新指定依赖的包(如更新失败,需要检查 package.json 中语义化版本规则,能否从当前版本升级到最新版本)
    • npm update:更新所有有新版本的包
  • 阮一峰-npm 模块管理器
  • 使用 npm 导致的问题
    • 下载慢,甚至下载不了

淘宝镜像

  • cnpm(淘宝镜像)
    • 将 npm 上的包同步更新到淘宝镜像上,目前是每 10 分钟同步一次。
    • 配置:

      npm install -g cnpm --registry=https://registry.npm.taobao.org

    • 常用命令:使用 cnpm 代替 npm 即可
    • 问题:
      • 会多下载一些文件/文件夹
      • 严重者会导致 webstorm 瘫痪,就像帕金森综合征
  • 修改 npm 的下载指向地址:
    • npm config set registry "https://registry.npm.taobao.org"
    • 获取当前的下载指向地址: npm config get registry

yarn Facebook 开发的包管理工具

  • yarn(包管理工具)
    • yarn 是 Facebook 开源的新的包管理器,可以用来代替 npm - 配置 npm install yarn -g
    • 特点:有缓存,没有自己的仓库地址
    • 常用命令

      yarn --version
      yarn
      yarn init
      yarn global package (全局安装)
      yarn add package (局部安装)
      yarn add package --dev
      yarn remove package
      yarn list
      
    • 地址:https://yarnpkg.com/zh-Hans/
  • cyarn
    • 使用淘宝镜像,更快
    • 配置: npm install cyarn -g --registry "https://registry.npm.taobao.org"
    • 常用命令:将 yarn 使用 cyarn 代替即可