前端开发系列078-Node篇之npm

一、简单介绍
npm全称Node packAge Manager是Node官方提供的包管理工具,下面列出包管理工具的功能边界。
> ❏ 注册机制
> ❏ 文件存储
> ❏ 上传下载
> ❏ 依赖分析
对于普通开发者而言包管理工具最主要的作用就是下载和安装(Node)包,前端开发中常用的包管理工具还有Bower以及Yarn等。
在npm网站上有数以万计的Node包。
具体使用的时候我们可以在命令行窗口中通过执行npm相关的命令来下载和管理需要的(Node)包。npm的相关命令主要涉及包的搜索、下载&&安装、卸载以及更新等。
二、基本命令
通常npm工具在安装Node.js环境(Node的安装直接到官网点击下载链接)的时候会跟随Node一起安装,可以通过在命令行中输入下面的命令来查看安装是否成功。
$ node -v 查看node的版本信息
$ npm -v 查看npm的版本信息,也可以使用$npm -version或者$npm --v指令。
技巧 使用$ npm version可以查看更详细的信息。
wendingding:npm wendingding$ npm -version
5.5.1
wendingding:npm wendingding$ npm version
{ npm: '5.5.1',
ares: '1.10.1-DEV',
cldr: '31.0.1',
http_parser: '2.7.0',
icu: '59.1',
modules: '57',
nghttp2: '1.25.0',
node: '8.9.3',
openssl: '1.0.2n',
tz: '2017b',
unicode: '9.0',
uv: '1.15.0',
v8: '6.1.534.48',
zlib: '1.2.11'
}
在通过命令行工具来练习和学习的时候,建议总是从工具的帮助指令开始。
$ npm help 查看node的使用帮助,也可以使用$npm -h或者$npm --h指令。
这里列出help指令的执行细节。
wendingding:~ wendingding$ npm help
Usage: npm <command>
where <command> is one of:
access, adduser, bin, bugs, c, cache, completion, config,
ddp, dedupe, deprecate, dist-tag, docs, doctor, edit,
explore, get, help, help-search, i, init, install,
install-test, it, link, list, ln, login, logout, ls,
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:
/Users/文顶顶/.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config
npm@5.5.1 /usr/local/lib/node_modules/npm
通过查看上面的帮助信息,我们可以知道npm的主要命令where <command> is one of下面的列表项以及这些命令的主要使用方式npm <command>。我们可以通过npm <command> -h的方式来学习某个特定命令的使用,下面给出示例。
$ npm init -h 查看init初始化命令的使用方式。
$ npm search -h 查看search搜索命令的使用方式。
wendingding:~ wendingding$ npm init -h
npm init [--force|-f|--yes|-y]
wendingding:~ wendingding$ npm search -h
npm search [--long] [search terms ...]
aliases: s, se, find
通过命令行执行的结果我们清楚了init初始化指令后面还可以跟--force或--yes等指令,而search搜索指令后面可以跟--long指令(以更详细的方式显示搜索结果)且支持搜索多个关键词。aliases:s , se , find表明search指令可以使用s , se 或者是find来替换,它们的作用是等价的。
我们可以通过下面的搜索命令来搜索和查看Node官方包仓库中的包信息。
$ npm search xx 搜索指定的包,使用--long可以查看更详细的信息。
$ npm view xxxx 查看指定包所使用的package.json文件信息。
wendingding:~ wendingding$ npm search jquery
NAME | DESCRIPTION | AUTHOR | DATE
jquery | JavaScript library… | =dmethvin… | 2018-01-20
jquery-ui | A curated set of… | =scott.gonzalez… | 2016-09-14
...省略剩下内容
wendingding:~ wendingding$ npm search --long jquery
NAME | DESCRIPTION | AUTHOR | DATE
jquery | JavaScript library | =dmethvin =mgol | 2018-01-20
| for DOM operations | =scott.gonzalez |
| | =timmywil |
jquery-ui | A curated set of | =scott.gonzalez | 2016-09-14
| user interface | =jzaefferer |
| interactions, | =devongovett |
| effects, widgets, | |
| and themes built on | |
| top of the jQuery | |
| JavaScript Library. | |
···省略剩下内容
wendingding:~ wendingding$ npm view jquery
{ name: 'jquery',
description: 'JavaScript library for DOM operations',
'dist-tags': { beta: '3.3.1', latest: '3.3.1' },
versions:
[ '1.5.1',···'3.3.1' ]
repository: { type: 'git', url: 'git+https://github.com/jquery/jquery.git' },
readmeFilename: 'README.md',
homepage: 'https://jquery.com',
keywords: [ 'jquery', 'javascript', 'browser', 'library' ],
bugs: { url: 'https://github.com/jquery/jquery/issues' },
license: 'MIT',
title: 'jQuery',
version: '3.3.1',
main: 'dist/jquery.js',
dependencies: {},
devDependencies: { ···省略··· }
scripts: { ···省略··· }
commitplease: { ···省略··· }
}
前面列出了以jquery为例执行搜索命令的细节,除使用$ npm search <pkg>命令来执行搜索外,使 用$ npm find xx或$ npm s xx或$ npm se xx命令也能达到同样的效果。
NPM模块仓库本身提供了一个查询服务Registry,点击跳转查询服务网址 。在这个网址后面跟上模块名,就会得到一个里面保存着该模块所有版本相关信息的JSON对象。譬如访问https://registry.npmjs.org/jquery 就能够获得jquery模块相关的信息(等价于使用$ npm view jquery指令)。
此外,在查询网址模块名的后面,还可以跟上版本号或者标签,用来查询某个具体版本的信息。比如, 访问 https://registry.npmjs.org/jquery/1.6.2 就能够得到jquery模块1.6.2版本相关的信息。在获取的JSON对象中,存在一个dist字段,该字段的tarball属性指向的是该版本压缩包的网址,跳转到这个网址下载压缩包,在本地解压,就能够得到当前模块的源码。
dist: {
shasum: "01757a4c5beea29e8ae697527c3131abbe997a28",
tarball: "https://registry.npmjs.org/jquery/-/jquery-1.6.2.tgz"
}
$ npm init 初始化操作,用于生成描述文件。
$ npm init -y 初始化操作,使用默认值自动生成描述文件。
init指令用来生成项目的配置(描述)文件(package.json)。该文件中包含了项目的名称、版本、作者、包依赖关系等信息,每个Npm包都拥有自己的package.json文件。在进行初始化的时候,如果使用-y或者--yes选项那么系统将会使用默认值来自动的生成描述文件。
wendingding:npm wendingding$ npm init --yes
Wrote to /Users/文顶顶/Desktop/npm/package.json:
{
"name": "npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"jquery": "^3.3.1"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
列出init初始化命令在使用-y或--yes选项时,从当前目录中提取的默认值填充规则。
- name:当前目录名称
- version:总是为1.0.0版本
- description:来自README的信息,或空字符串 ""
- main:总是为index.js文件
- scripts:默认情况下会创建一个空test脚本
- keywords:空数组[]
- author:空字符串
- license: ISC
- bugs:当前目录中的信息(如果存在)
- homepage:当前目录中的信息(如果存在)
- dependencies:空对象,如果当前目录存在已安装的包则显示。
- devDependencies:空对象。
在下载和安装相关Node包的时候,我们可以选择局部安装或全局安装,如果采用了全局安装的策略那么系统中所有的项目均能使用该包。
$ npm install 安装配置文件中列出的所有依赖包。
$ npm install less 安装指定的包到当前路径(局部安装)。
$ npm install -g less 安装指定的包到全局包安装路径(全局安装)
install命令会将指定的包安装在当前目录下的node_modules子文件夹中,安装好后在当前项目中(如果是node项目)可以通过require来进行加载。-g选项是global全局的意思,表示把指定的包安装在全局包的安装路径中(/usr/local/lib/node_modules)。
下面列出less的安装细节。
wendingding:npm wendingding$ npm install less
+ less@3.8.1
added 60 packages in 12.456s
wendingding:npm wendingding$ npm install -g less
/usr/local/bin/lessc -> /usr/local/lib/node_modules/less/bin/lessc
+ less@3.8.1
added 60 packages in 2.299s
wendingding:npm wendingding$
install 命令同i, isntall, add等命令等价。
install 命令的可选参数还有[--save-prod|--save-dev|--save-optional] [--save-exact] [--no-save]等。
--save 选项在安装包的时候会更新package.json文件的dependencies字段。
--save-dev 选项在安装包的时候会更新package.json文件devDependencies字段(保存包名:版本信息)。
如果我们需要把项目或系统中某些特定的Node模块移除,那么可以使用uninstall命令来卸载,该命令同un, unlink, remove, rm, r等命令等价。
$ npm uninstall less 卸载当前项目中的指定包(局部)。
$ npm uninstall -g less 卸载全局包安装路径下指定的包(全局)
下面列出less的卸载细节(如果是要卸载全局安装的包那么请使用-g选项)。
wendingding:npm wendingding$ npm remove less
npm WARN saveError ENOENT:no such file or directory, open '/Users/文顶顶/npm/package.json'
npm WARN enoent ENOENT:no such file or directory, open '/Users/文顶顶/npm/package.json'
npm WARN npm No description
removed 1 package in 0.737s
wendingding:npm wendingding$ npm remove -g less
removed 60 packages in 0.827s
我们可以通过update命令来执行更新操作,在进行更新的时候可以指定包名,也可以通过-g选项来指定要更新全局安装的包,<pkg>指代的是包的名称,譬如jsonfile或者jquery等。
$ npm update 更新当前项目中所有的包。
$ npm update -g 更新全局安装路径下所有的包。
$ npm update pkg 更新当前项目中安装的指定包。
$ npm update -g pkg 更新全局安装路径下安装的指定包。
wendingding:npm wendingding$ npm list
/Users/文顶顶/Desktop/npm
└── (empty)
wendingding:npm wendingding$ npm install jquery@3.1.0
···省略内容
+ jquery@3.1.0
added 1 package in 5.569s
wendingding:npm wendingding$ npm update jquery
···省略内容
+ jquery@3.3.1
updated 1 package in 0.547s
wendingding:npm wendingding$ npm list
/Users/文顶顶/Desktop/npm
└── jquery@3.3.1
上面的命令行中,我们首先通过$ npm list命令列出当前项目中已经安装的Node模块,然后下载并安装了jQuery框架的3.1.0版本,继而通过$ npm update jquery指令来把jQuery更新到jquery@3.3.1最新版本。update命令也可以使用简写up来替代。
$ npm run 运行script字段定义的命令。
$ npm list 列出当前项目中安装的所有包。
$ npm list -g 列出系统中全局安装的所有包。
$ npm root -g 列出系统中全局安装包的安装路径。
$ npm config get cache 查看本地的缓存目录。
wendingding:npm wendingding$ npm root -g
/usr/local/lib/node_modules
wendingding$ npm config get cache
/Users/文顶顶/.npm
三、番外篇
npm工具最初由Isaac Z. Schlueter(艾萨克·施吕特)开发,完全使用JavaScript实现。作者有说明实现npm项目的初衷,主要是当时考虑到模块管理问题的重要性,又因为其它平台如PHP的PEAR或Perl的CPAN等工具都存在诸多缺陷(点击查看作者相关讨论),所以就自己动手实现了。
Isaac Z. Schlueter简介:npm作者 CEO ,Node.js的前BDFL,Github主页和个人博客。
资料
截止日前,npm管理的模块(包)总量已经超出70万,下面给出和其他同类型工具的横向对比(数据来源)。

前端开发系列078-Node篇之npm的更多相关文章
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- cesium-webpack 入门开发系列一初探篇(附源码下载)
前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...
- 旨在脱离后端环境的前端开发套件 - IDT Server篇
IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- openlayers4 入门开发系列之风场图篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列之热力图篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
随机推荐
- Rider搭建C#开发环境
1.安装DotNet-SDK 下载链接:https://dotnet.microsoft.com/download 安装完成后配置环境变量,然后在cmd窗口运行:dotnet --info命令显示当前 ...
- ESP32+Arduino入门(四):OLED屏随机显示古诗
前言 我觉得去做一些简单又好玩的案例是入门很好的选择. 在实践的过程中会碰到很多需求很多问题在解决这些需求这些问题的过程就是在学习的过程. 今天我来分享一个随机显示古诗的案例,如果对此感兴趣可以跟我一 ...
- ThreadLocal 内存泄漏原因和解决方法
一.ThreadLocal 内存泄漏的原因 ThreadLocal 的内存泄漏问题主要与其底层实现 ThreadLocalMap 的结构和垃圾回收机制有关.以下是核心原因: 1.ThreadLocal ...
- 请求参数的绑定(获取请求数据)、请求参数是一个POJO
一. @Controller @RequestMapping("/parem") public class ParamController { /** * springmvc接受请 ...
- 国际化利器 Intl Messageformat
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 Formats ICU Message string ...
- 提高Flutter应用性能的最佳实践
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 如何使用Flutter开发执行操作系统shell命令的工具
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 浅析NodeJS中的事件循环和异步API
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- Django中的内置Tags
Dates {% now "m/d/Y" %} copyright {% now 'Y' as current_year %} 该tag也可以接受Django的date 变量,比如 ...
- 电梯题目集总结性Blog
一.前言 对这三次题目集的总结: 这三次作业的难度是层层递进的.题目数量安排得当,给的时间也足够用.前面的基础题像搭积木一样,带着我们一步步熟悉怎么设计类和对象:但每次的最后一题就像突然升级的关卡 ...