包管理器npm介绍

351 阅读7分钟

什么是npm?

npm的全称是Node Package Manager,是一个NodeJS的包管理和分发工具。

简单的讲,npm就是现代工程化的JavaScript项目中的依赖管理工具,工程化项目中的JavaScript 依赖包全部通过npm工具进行安装和管理,开发者也可以通过npm工具发布个人开发的依赖包项目提供给世界范围内的程序员使用。

如何使用npm

本地安装了NodeJS环境后,在系统的命令行工具中除node命令外,还包含npm命令。npm命令可以帮 助开发者快速的安装和管理项目。

查看npm版本的方式

npm -v

控制台上会展示当前npm以来的版本信息

7.19.1

查看npm可用功能

开发者成功安装了npm依赖管理工具后,可以通过命令行的方式查看npm所包含的所有功能,利用 npm -h 指令可用查看所有npm的功能命令。

npm install        install all the dependencies in your project
npm install <foo>  add the <foo> dependency to your project
npm test           run this project's tests
npm run <foo>      run the script named <foo>
npm <command> -h   quick help on <command>
npm -l             display usage info for all commands
npm help <term>    search for help on <term> (in a browser)
npm help npm       more involved overview (in a browser)
# 所有可用命令列表
All commands:

    access, adduser, audit, bin, bugs, cache, ci, completion,
    config, dedupe, deprecate, diff, dist-tag, docs, doctor,
    edit, exec, explain, explore, find-dupes, fund, get, help,
    hook, init, install, install-ci-test, install-test, link,
    ll, login, logout, ls, org, outdated, owner, pack, ping,
    prefix, profile, prune, publish, rebuild, repo, restart,
    root, run-script, search, set, set-script, shrinkwrap, star,
    stars, start, stop, team, test, token, uninstall, unpublish,
    unstar, update, version, view, whoami

npm镜像管理配置

由于日常的大量的npm依赖都通过世界的npm依赖中心提供,所以使用npm工具安装JavaScript依赖的时候需要开发者必须连接互联网,此时就涉及到npm的镜像地址配置工作了。 由于不同国家的开发者所存在的网络环境不同,而npm的依赖对于国内开发者来说都是保存在国外,所以使用npm下载依赖包时连接默认地址会出现访问慢的问题,所以在安装npm依赖管理工具时大多数人都会先使用配置工具将镜像地址进行修改。

查看当前的npm镜像地址

npm config get registry

设置npm的镜像地址

npm config set registry "镜像地址"

常用的npm镜像地址

npm ---------- https://registry.npmjs.org/

yarn --------- https://registry.yarnpkg.com/

tencent ------ https://mirrors.cloud.tencent.com/npm/

cnpm --------- https://r.cnpmjs.org/

taobao ------- https://registry.npmmirror.com/

npmMirror ---- https://skimdb.npmjs.com/registry/

npm镜像管理工具nrm

  1. 安装指令

npm i nrm -g

  1. 列出所有可用的地址

nrm ls

  1. 添加新的地址

nrm add <key> <address>

  1. 删除已有的地址

nrm del <key>

  1. 切换现有的镜像地址

nrm use <key>

npm config的介绍

npm的命令行工具不仅仅可以切换镜像地址,还可以对npm所有的属性进行设置,在上面的章节中展 示了设置或获取镜像地址的完整指令为npm config get/set registry [<address>]

实际上 npm config 部分就代表操作了npm的配置文件的某个属性,所以setget对应的就是获取或设置指定属性的结果。

列出npm默认配置信息

npm config list

企业级npm包管理器实用攻略

对于npm的应用其实大多数开发者涉及到的场景都是以下集中情况:

  • 安装项目的所有依赖包 npm install
  • 安装执行依赖包到项目 npm install
  • 删除置顶依赖包 npm uninstall
  • 执行项目的功能脚本

npm run build #构建项目

npm run dev/serve/start #运行项目

npm run eslint/... #其他项目功能

若仅掌握以上类型的npm指令正常在开发过程中能解决日常的大部分问题,但是对于想要晋升的开发者来说,如果只对npm了解的很片面代表所从事的项目级别和研发级别不是很高,所以接下来围绕Node项目进一步的了解npm。

初始化工程项目

对于工程化项目来说,仅仅创建一个文件夹是不够的,我们需要在创建文件夹的基础上为该项目创建一个描述文件,也即是在前端项目中特别常见的package.json文件。那么这个文件究竟包含多少属性,每个属性有什么样的规则呢? 通过npm init -h可以查看该指令的使用方式

npm-init.png

初始化一个项目

  1. 在编辑器中创建一个文件夹test

  2. 在命令行工具中打开test文件夹并且输入指令

npm init -y

  1. 命令行工具中会弹出如下日志,并且文件夹中会自动生成package.json配置文件
{

"name": "test",

"version": "1.0.0",

"description": "",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"keywords": [],

"author": "",

"license": "ISC"

}
  1. 打开package.json文件查看默认属性
{

"name": "test",//项目名称

"version": "1.0.0",//项目当前的版本号

"description": "",//项目的描述内容

"main": "index.js",//项目作为依赖包被别人引用时所执行的文件

"scripts": { //项目的调试命令

"test": "echo \"Error: no test specified\" && exit 1"

},

"keywords": [],//项目作为依赖发布后的搜索关键字

"author": "", //项目作者

"license": "ISC"//软件许可证

}

依赖管理介绍

安装项目依赖通过 npm install 指令完成,不过npm安装依赖的方式多种多样,并且存在很多的指令组合,可以使用 npm install -h 查看可用的npm安装方式

npm-instal-h.png

实际开发者使用更多的是如下几个指令:

npm install xxx -S|--save|-s #代表本地安装一个依赖包在项目中使用 npm install xxx -D|--save-dev #代表安装一个依赖包到项目,该依赖包为运行项目所需的依赖

npm install xxx -g|--global #代表全局安装一个依赖包到npm本地电脑的全局依赖文件夹中

全局安装的依赖可以通过如下指令查看:

npm ls -g

除以上几个指令外,实际上npm安装依赖时还可以选择如下指令:

npm install xxx --save-optional #代表可选依赖 npm install xxx --save-peer #代表当前项目作为依赖包提供给其他项目使用时,项目需要自行安装当前依赖

npm依赖加载规则

require.png

bin属性介绍

我们发现在使用npm安装依赖时,并不是所有依赖都是需要import到我们的项目中才能运行的依赖, 比如nrm包就是当项目安装后,会在全局命令行工具中默认可以使用nrm指令来操作镜像地址。这个能力取决于package.json的bin属性。

接下来继续通过实践的方式学习如何创建带有命令行工具的项目。

  1. 在编辑器中创建名为demo的项目

  2. 在项目的根目录中创建bin文件夹并在其中创建index.js文件

  3. 在index.js文件中编写如下命令

#!/usr/bin/env node

console.log('hello demo')

所声明的部分代表通过node命令行工具执行该文件 console.log('hello demo')

  1. 执行 npm init -y 命令初始化package.json

  2. 在demo根目录下创建一个空的index.js文件(此步骤为支持打包构建)

  3. 在package.json文件添加bin属性,将该属性的值改为

 "bin": {
     "my-script": "./bin/index"
 },
  1. 将我们当前的项目变成一个真正的依赖包,这里便需要一个指令 npm pack,运行它

  2. 会发现本项目中出现名为demo-1.0.0.tgz的文件,这个文件便是我们平时使用npm install所安装的依赖包的本体

  3. 接下来需要将当前的demo安装包安装到我们的本地电脑上作为全局依赖,所以需要在命令行工具 中打开demo目录并执行指令npm i ./demo-1.0.0.tgz -g

  4. 安装完毕后执行 npm ls -g 会发现我们的demo项目会包含在全局的npm依赖列表中

  5. 接下来在命令行工具中执行命令my-script

命令行会出现 hello demo