Nodejs的npm包管理器快速入门

          Nodejs的npm包管理器快速入门

                               作者:尹正杰 

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.包(package)概述

1>.package概述

  CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。我们可以将package理解为增强的模块。

  CommonJS的包规范由包结构和包描述文件两个部分组成。     包结构:       用于组织包中的各种文件。     包描述文件:       描述包的相关信息,以供外部读取分析。

2>.包结构概述

  包实际上就是一个压缩文件,解压以后还原为目录。

  符合规范的目录,应该包含如下文件:     package.json:
      包描述的文件     bin:
      存放可执行二进制文件的目录     lib:
      存放依赖的js代码的目录     doc:
      存放包的文档信息的目录     test:
      存放单元测试的目录

3>.包描述文件

  包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件,即"package.json",其位于包的根目录下,是包的重要组成部分。

  "package.json"中的包含以下常用的字段:     name:
      包的标识,即包名称。
    description:
      描述包的用途。  
    version:
      包的版本信息。
    keywords:
      为包定义的关键字,程序员可以基于关键字来搜索与之匹配的包名。     maintainers:
      主要的贡献者信息,通常会将开发者的姓名和邮箱用多个object对象封装到一个数组中。
    contributors:
      开发的贡献者成员,非主力开发人员,但这些人的确是有参与该项目的哟~
    bugs:
      会提供bugs的提交地址,这样开发者可以基于你所提交的bugs进行及时的修复。     licenses:
      许可证授权信息,例如"MIT"。
    repository:
      存储库相关的信息。
    dependencies:
      当前包所依赖的插件信息。     homepage:
      包的主页信息。通常是某个包提供商的官网信息。
    os:
      操作系统相关的信息。
    cpu:
      CPU相关的信息
    engine:
      指向引擎的相关信息。
    builtin:
      构建工具信息。     directories:
      目录结构信息。
    implements:
      工具信息。
    scripts:
      脚本命令的相关信息。
    author:       作者信息
    bin:
      可执行程序信息。
    main:
      定义主文件信息,该文件在包中是真实存在的。例如: "main": "./index"
    devDependencies:
      开发环境依赖的信息,通常记录了开发环境所依赖的软件版本信息。在实际生产环境中,开发环境可能并不被需要!只需提供运行环境即可~

  温馨提示:
    不建议在json文件中写注释信息!可能导致错误出现!

 

二.包管理工具(英文全称: Node Package Manager,简称"NPM")快速入门

1>.NPM概述

  CommonJS包规范是理论,NPM(Node Package Manager)是其中一种实践。对于NodeJS而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。

  程序员可以借助NPM,Node与第三方模块之间形成了很好的一个生态系统,然而NPM就是强有力的推手,甚至有些程序员安装NodeJS环境并不是为了编写NodeJS代码,而是为了使用NMP工具,甚至有的小伙伴觉得NPM工具的价值已经超过NodeJS本身了。

  综上所述,我们无需安装NPM工具,因为NodeJS内部已经集成了NPM工具,接下来我们来介绍一下nmp包管理器的常用命令。

2>.查看NodeJS版本

C:\Users\yinzhengjie>npm -v
6.14.10

C:\Users\yinzhengjie>
C:\Users\yinzhengjie>npm -v

3>.查看NodeJS内置模块组件的版本

C:\Users\yinzhengjie>npm version
{
  npm: '6.14.10',
  ares: '1.16.1',
  brotli: '1.0.9',
  cldr: '37.0',
  icu: '67.1',
  llhttp: '2.1.3',
  modules: '83',
  napi: '7',
  nghttp2: '1.41.0',
  node: '14.15.4',
  openssl: '1.1.1i',
  tz: '2020a',
  unicode: '13.0',
  uv: '1.40.0',
  v8: '8.4.371.19-node.17',
  zlib: '1.2.11'
}

C:\Users\yinzhengjie>
C:\Users\yinzhengjie>npm version

4>.搜索模块包

C:\Users\yinzhengjie\demo>npm search math
NAME                      | DESCRIPTION          | AUTHOR          | DATE       | VERSION  | KEYWORDS
math                      | Mathematical…        | =kzh            | 2011-09-19 | 0.0.3    |
Math                      | This package name…   | =npm            | 2016-06-14 | 0.0.1-s… |
math-expression-evaluator | A flexible math…     | =bugwheels94    | 2020-12-20 | 1.3.7    | math expression evaluator p
simple-statistics         | Simple Statistics    | =tmcw           | 2020-12-14 | 7.4.0    | descriptive linear math pro
mathjs                    | Math.js is an…       | =josdejong      | 2021-01-16 | 9.0.0    | math mathematics functions
katex                     | Fast math…           | =edemaine…      | 2020-07-12 | 0.12.0   |
node-int64                | Support for…         | =broofa…        | 2015-04-04 | 0.4.0    | math integer int64
is-number                 | Returns true if a…   | =doowb…         | 2018-07-04 | 7.0.0    | cast check coerce coercion
dompurify                 | DOMPurify is a…      | =cure53         | 2020-12-18 | 2.2.6    | dom xss html svg mathml sec
long                      | A Long class for…    | =dcode          | 2018-02-03 | 4.0.0    | math
nerdamer                  | javascript…          | =brosnanyuen…   | 2020-12-16 | 1.1.6    | math matrix complex number
jsbn                      | The jsbn library is… | =andyperlitch   | 2017-02-13 | 1.1.0    | biginteger bignumber big in
big-integer               | An arbitrary length… | =peterolson     | 2019-11-11 | 1.6.48   | math big bignum bigint bigi
hull.js                   | JavaScript library…  | =andriiheonia   | 2020-10-24 | 1.0.1    | geometry concave-hull math
math.log1p                | An…                  | =ljharb         | 2020-12-25 | 1.0.1    | Math.log1p math log1p log s
math-random               | math-random is an…   | =michaelrhodes  | 2020-08-07 | 2.0.1    |
math.js                   | A simple math…       | =toubou         | 2020-02-04 | 1.1.46   | math mathematics functions
mathml                    | MathML allows to…    | =physikerwelt   | 2020-11-12 | 1.1.12   | mathml math xml mathml3
red-agate-math            | red-agate math…      | =shellyln       | 2020-10-24 | 0.5.0    | finite field galois field f
@wiris/mathtype-html-inte | Allows to integrate… | =wiris          | 2020-12-09 | 1.4.5    | chem chemistry chemtype edi
gration-devkit            |                      |                 |            |          |

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm search math

5>.自定义安装的模块存储路径(若不指定默认会安装到npm应用程序的相关目录中)

C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:52    <DIR>          .
2021/01/19  23:52    <DIR>          ..
               0 个文件              0 字节
               2 个目录  9,305,300,992 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm init  # 只需该命令后,我们可以直接一路回车(需要注意的是包名不支持驼峰命名法,但可以使用下划线连接各个单词哟~),初始化成功后,会生成"package.json"文件
This 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 init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (demo)
version: (1.0.0)
description: My local warehouse
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to C:\Users\yinzhengjie\demo\package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "My local warehouse",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)

C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:51    <DIR>          .
2021/01/19  23:51    <DIR>          ..
2021/01/19  23:51               218 package.json
               1 个文件            218 字节
               2 个目录  9,306,783,744 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm init # 只需该命令后,我们可以直接一路回车(需要注意的是包名不支持驼峰命名法,但可以使用下划线连接各个单词哟~),初始化成功后,会生成"package.json"文件
C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:51    <DIR>          .
2021/01/19  23:51    <DIR>          ..
2021/01/19  23:51               218 package.json
               1 个文件            218 字节
               2 个目录  9,308,332,032 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>type package.json
{
  "name": "demo",
  "version": "1.0.0",
  "description": "My local warehouse",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>type package.json

6>.由于我们上面使用了"npm init"配置了本地软件源仓库,因此本次安装会存储在上面指定的目录中哟~

C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:51    <DIR>          .
2021/01/19  23:51    <DIR>          ..
2021/01/19  23:51               218 package.json
               1 个文件            218 字节
               2 个目录  9,306,763,264 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm install math  # 安装math软件包
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN demo@1.0.0 No repository field.

+ math@0.0.3
added 1 package from 1 contributor and audited 1 package in 2.3s
found 0 vulnerabilities


C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:57    <DIR>          .
2021/01/19  23:57    <DIR>          ..
2021/01/19  23:57    <DIR>          node_modules
2021/01/19  23:57               283 package-lock.json
2021/01/19  23:57               263 package.json
               2 个文件            546 字节
               3 个目录  9,306,484,736 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>dir node_modules
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo\node_modules 的目录

2021/01/19  23:57    <DIR>          .
2021/01/19  23:57    <DIR>          ..
2021/01/19  23:57    <DIR>          math
               0 个文件              0 字节
               3 个目录  9,306,484,736 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>dir node_modules\math
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo\node_modules\math 的目录

2021/01/19  23:57    <DIR>          .
2021/01/19  23:57    <DIR>          ..
2011/09/19  09:38                52 AUTHORS
2011/09/19  09:38               671 Cakefile
2011/09/19  09:38             2,059 math.coffee
2011/09/19  09:38             2,902 math.js
2021/01/19  23:57             1,301 package.json
               5 个文件          6,985 字节
               2 个目录  9,306,320,896 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm install math # 在当期目录安装math软件包
  温馨提示:
    (1)install也可以简写为"i"选项,例如: "npm i math"
    (2)安装软件源时也可以声明在全局(global)模式安装包,通常情况下,需要全局安装的包基本上都是一些工具。一般只会在计算机中使用,并不会在项目中使用,比如一些打包工具,通常情况下不经常使用"-g"选项,如: "npm install webpack -g"
    (3)安装包并添加到依赖(注意对比观察package.json文件中的"dependencies"选项,应该是有类似于"math": "0.0.3"的信息)中,这种安装方式在开发中经常使用,如: "npm i math --save"
    (4)下载当前项目所依赖的包,我们可以直接只需命令"npm install",他会根据package.json文件中的"dependencies"选项下载对应软件的依赖包,下载成功后我们才能正常运行别人开发的项目哟~

7>.移除软件包

C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/19  23:57    <DIR>          .
2021/01/19  23:57    <DIR>          ..
2021/01/19  23:57    <DIR>          node_modules
2021/01/19  23:57               283 package-lock.json
2021/01/19  23:57               263 package.json
               2 个文件            546 字节
               3 个目录  9,304,813,568 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>dir node_modules
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo\node_modules 的目录

2021/01/19  23:57    <DIR>          .
2021/01/19  23:57    <DIR>          ..
2021/01/19  23:57    <DIR>          math
               0 个文件              0 字节
               3 个目录  9,304,813,568 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm remove math
npm WARN demo@1.0.0 No repository field.

removed 1 package in 10.151s

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 6C28-75D5

 C:\Users\yinzhengjie\demo 的目录

2021/01/20  00:14    <DIR>          .
2021/01/20  00:14    <DIR>          ..
2021/01/20  00:14                67 package-lock.json
2021/01/20  00:14               240 package.json
               2 个文件            307 字节
               2 个目录  9,304,707,072 可用字节

C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>npm remove math
  温馨提示:
    (1)remove也可以简写为"r"选项,例如: npm r math

8>.查看NodeJS的帮助信息

C:\Users\yinzhengjie>npm help

Usage: npm <command>

where <command> is one of:
    access, adduser, audit, bin, bugs, c, cache, ci, cit,
    clean-install, clean-install-test, completion, config,
    create, ddp, dedupe, deprecate, dist-tag, docs, doctor,
    edit, explore, fund, get, help, help-search, hook, i, init,
    install, install-ci-test, install-test, it, link, list, ln,
    login, logout, ls, org, outdated, owner, pack, ping, prefix,
    profile, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, team, test, token, tst, un,
    uninstall, unpublish, unstar, up, update, v, version, view,
    whoami

npm <command> -h  quick help on <command>
npm -l            display full usage info
npm help <term>   search for help on <term>
npm help npm      involved overview

Specify configs in the ini-formatted file:
    C:\Users\yinzhengjie\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@6.14.10 D:\Language\nodejs\node_modules\npm

C:\Users\yinzhengjie>
C:\Users\yinzhengjie>npm help

 

三.部署NMP工具常见的报错信息处理

1>.npm ERR! No search sources available

  如上图所示,说是没有可用的搜索资源,这个时候我们先将软件源还原到NodeJS的软件源,就可以搜索到啦!

  具体命令如下所示:
    C:\Users\yinzhengjie>npm config set registry https://registry.npmjs.org

2>.

 

posted @ 2021-01-03 05:25  尹正杰  阅读(330)  评论(0编辑  收藏  举报