node 梳理(一):npm 相关

438 阅读2分钟

npm

npm 全称为 node package manager,即 node 包管理。

  • 所谓的包,是多个文件的集合。

npm 包分为全局包、本地包。

  • 全局包(不能在代码中使用 只能在命令中使用) 、 本地包(只能在当前项目中使用)

  • 全局包的安装命令为

    npm i xxx -g

  • 本地包的安装命令为

    npm i xxx --save-dev/--save
    -D 为 --save-dev 的简写,-S 为 --save 的简写
    -D 指开发依赖,如 babel 等,主要作用是编译代码,-S 为项目依赖,为项目提供支持,如 react

nrm

nrm 全称为 npm registry manager,即 npm 的镜像源管理工具。

  • 它是一个 npm 全局包
  • 使用这个工具我们可以在不同的 npm 源间切换,便于选择网络较快的下载源。

nrm 下载命令为 npm i nrm -g mac 下需要在命令前加 sudo

我们可以通过 nrm --help 命令来查看 nrm 的相关命令:

使用 nrm ls 来查看当前可用的 npm

使用 nrm test 来测试当前各个源下的网速

使用 nrm current 来查看当前自己使用的 npm

使用 nrm use xx 来切换自己的下载源

node 版本管理

常用的 node 版本工具有两个:

  • nvm
  • n

他们的区别大致可以分为一下几点:

1、安装方式:

  • n 是一个需要全局安装的 npm 包,因此在使用 n 之前,你必须已经安装了 node
  • 而 nvm 则是一个独立的软件包,我们需要单独使用它的安装逻辑:
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

2、node 管理方式

  • n 会先将指定版本的 node 存储下来,然后将其复制到我们熟知的路径 /usr/local/bin,非常简单明了。当然由于 n 会操作到非用户目录,所以需要加 sudo 来执行命令。
  • nvm 将不同的 node 版本存储到 ~/.nvm/<version>/ 下,然后修改$PATH,将指定版本的 node 路径加入,这样我们调用的 node 命令即是使用指定版本的 node
  • nvm 不依赖 node 环境,是 node 依赖 nvm,而不像 n 那样产生类似循环依赖的问题

3、对全局模块的管理。

  • n 对全局模块毫无作为,因此有可能在切换了 node 版本后发生全局模块执行出错的问题
  • nvm 的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突。

4、系统支持

  • nvm 不支持 Windows

发布自己的 npm 包

全局包

1、新建文件夹 my-npm,并通过 npm init 初始化项目

  • npm init -y 可默认所有配置

2、新建 bin 目录,并在 package.json 中新增 bin 配置项

// my-npm/bin/index.js

#! /usr/bin/env node // 声明运行环境为 node
require('../index');
console.log('my-npm')

package.json


 "bin": {
    "my-npm": "./bin/index.js"
  },

3、cd 到 my-npm 目录下,运行 npm link 命令

右上图我们可知,在执行 npm link 命令后,系统在新增了 /usr/local/bin 目录下新增了 my-npm 命令,该命令的实际文件地址指向 /Users/mac/Desktop/zf/node/my-npm,即我们新建的项目。

此时,输入 my-npm 命令,即可执行我们新建的全局命令,打印出文件的内容。

4、可通过 npm unlink 来删除该命令

删除命令后,my-npm 则失效。

发包

1、注册npm 账号

2、进入项目目录,登陆 npm 账号

$ npm adduser
Username:
Password:
Email:

如下图:

3、上传

npm publish

若包名已经存在,则会抛错:

若包名和已经存在的包名相似,则抛出以下错误:

提示我们可以在包名前加上作用域,修改包名后继续提交:

版本号

我们可以使用 npm version xx 命令来修改 npm 包的版本号,具体参数可以通过 --help来获得:

完!