Node.js 包管理器 NPM 讲解
包管理器又称软件包管理系统,它是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。对于我们业务开发也很受益,相同的东西不必重复去造轮子。
每个工具或者开发语言都有相应的包管理器,好比 Ubuntu 的 apt-get、Centos 的 yum、Java 的 Maven 仓库等等。Node.js 中目前最出名的包管理器为 NPM 也是生态最好的。
什么是 NPM?
NPM 是 Node.js 中的包管理器。允许我们为 Node.js 安装各种模块,这个包管理器为我们提供了安装、删除等其它命令来管理模块。这里有一点我们需要注意,我们必须要有一个 package.json 文件或 node_modules 目录安装模块到本地。
NPM 最好的一点是它会在本地存储我们所安装的依赖项,存在于 package.json 的 dependencies 对象里。例如,如果一个模块 X 使用了模块 A 版本为 1.0,模块 Y 使用了模块 A 版本为 1.5,那么模块 X 或 Y 都将在本地拥有自己对应的模块 A 的副本。
// 模块 X
{
"name": "X",
"dependencies": {
"A": "^1.0"
}
}
// 模块 Y
{
"name": "Y",
"dependencies": {
"A": "^1.5"
}
}
什么时候需要 NPM 包?
当我们在开发一些 Node.js 项目时,可能会遇到一些地方需要 NPM,例如链接 Redis、MongoDB 或者发送请求 Request 等,有了这些现有模块可以使我们更专注于业务开发,当然有时你会有些特别的需求,这时可能需要自己去封装一个 NPM 模块,实现模块复用、资源共享。
NPM 安装
NPM 不需要单独安装,在我们安装 Node.js 环境时,NPM 也就安装了,Node.js 环境还没搭建的同学可参考 “3N 兄弟” 助您完成 Node.js 环境搭建 一节。
终端执行 npm -v 命令查看当前 npm 版本
$ npm -v
5.6.0
NPM 源设置
在国内有时候受限于网络因素的影响,通常在安装一个包管理器之前可以切换为 taobao 源,使得速度可以更快,但是要注意如果是私有模块在 NPM 官方的,则必须切换为官方源,否则会出现 404 错误。
查看当前 npm 源
npm config get registry
# http://registry.npmjs.org/
切换为 taobao 源
npm config set registry=https://registry.npm.taobao.org
切换为 npm 官方源
在 npm publish 的时候 需要切换回 npm 源
npm config set registry=http://registry.npmjs.org
如何在项目中应用
让我们新建一个项目 test,刚开始这是一个空的文件夹
第一步
控制台执行 npm init,根据提示输入信息,会生成一个 package.json 文件,如下所示:
{
"name": "test", // 项目名称
"version": "1.0.0", // 版本号
"description": "", // 描述
"main": "index.js", // 入口文件,默认 index.js
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "May", // 作者
"license": "ISC"
}
第二步
安装 npm 模块,例如我们安装一个 moment 模块格式化时间,执行以下命令
npm install moment -S
# or
npm i moment --save
安装成功之后,会生成一个新的目录 node_modules 这是用来存放我们所安装的模块,另外 package.json 也会发生变化多了一个 dependencies 对象,这个是用来存储我们的模块版本信息。
"dependencies": {
"moment": "^2.24.0"
}
看下我们当前的目录结构:

NPM 注册登录
注册
$ npm adduser
Username: your name
Password: your password
Email: (this IS public) your email
查看当前使用的用户
npm whoami
npm登录
npm login
私有模块
如果是公司团队或者个人项目的私有npm包,进行发布的时候要注意下啦,模块的名字要以@符号开始、/符号结束,中间部分为私有包的组织名。例如,@may/logger,may为组织的名称,logger为包名。
package.json
{
"name": "@may/logger"
}
NPM-Module-发布
进入项目根目录,输入命令。
npm publish
常见问题
Questions1
no_perms Private mode enable, only admin can publish this module: coorddistance
这里注意的是因为国内网络问题,许多小伙伴把npm的镜像代理到淘宝或者别的地方了,这里要设置回原来的镜像。
npm config set registry=http://registry.npmjs.org
Questions2
Unexpected end of input at 1:3637 npm ERR! egistry.npmjs.org/mkdirp/-/mkdirp-0.3.2.tgz"},"engines":{"node":"*"}
执行命令 npm cache clean --force
Questions3
Node项目部署 私有包报错404 一般两种情况造成:
- 检查服务器是否登录npm账号
- 执行命令
npm config get registry检查是否指向https,没有指向https执行命令 npm config set registry=https://registry.npmjs.org
Node.js 包管理器 NPM 讲解的更多相关文章
- 9.Node.js 包管理器npm
npm 是 Node.js 官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...
- Node.js包管理器:
Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...
- npm --- Node.js包管理器
目录 1. 安装Node.js 2. 运行npm 3. npm介绍 3.1 安装插件 3.2 更新插件 3.3 卸载插件 3.4 查看当前目录中的插件列表 4. 使用cnpm 4.1 安装 npm( ...
- NET Core 静态文件及JS包管理器(npm, Bower)的使用
NET Core 静态文件及JS包管理器(npm, Bower)的使用 文章目录 在 ASP.NET Core 中添加静态文件 使用npm管理JavaScript包 使用Bower管理JavaScri ...
- node.js 安装及配置(hello world)及 node 的包管理器(npm)
下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...
- NPM Node.js 包管理
1.NPM 简介 1.1 NPM Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动, ...
- nodejs的包管理器npm和cnpm
http://www.ydcss.com/archives/18 3.npm介绍 3.1.说明:npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装 ...
- ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用
在 ASP.NET Core 中添加静态文件 虽然ASP.NET主要大都做着后端的事情,但前端的一些静态文件也是很重要的.在ASP.NET Core中要启用静态文件,需要Microsoft.AspNe ...
随机推荐
- PAA养老房产:以情怀打造精细化服务
养老服务工作需要从业者具备尊老.爱老.敬老的职业道德,这种职业道德的培养非一朝一夕可锻造,而是需要长年累月.一点一滴的渗透和养成.PAUL ADAMS ARCHITECT(以下简称PAA)(公司编号: ...
- C++算法代码——快速排序
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?cid=1371&pid=1 题目描述 第一行一个数字n, n<=100000. ...
- 【Android初级】如何实现一个有动画效果的自定义下拉菜单
我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...
- Nginx之Location匹配规则
概述 经过多年发展,nginx凭借其优异的性能征服了互联网界,成为了各个互联网公司架构设计中不可获取的要素.Nginx是一门大学问,但是对于Web开发者来说,最重要的是需要能捋的清楚Nginx的请求路 ...
- C语言指针基本知识
对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...
- 死磕Spring之IoC篇 - BeanDefinition 的解析阶段(XML 文件)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- java高并发编程基础之AQS
引言 曾经有一道比较比较经典的面试题"你能够说说java的并发包下面有哪些常见的类?"大多数人应该都可以说出 CountDownLatch.CyclicBarrier.Sempah ...
- Git:版本库建立与状态查看
版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可 ...
- SSM整合再回顾
一.spring 前言:提起spring就不得不说到它的IOC和AOP的概念.IOC就是一个对象容器,程序员可以将对象的创建交给spring的IOC容器来创建,不再使用传统的new对象方式,从而极大程 ...
- 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针
剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...