包管理器,又称包管理系统,是在计算机上自动安装、准备、卸载和升级软件包的工具组合。用于各种系统软件和应用程序广泛用于软件安装管理。对我们的业务发展也非常有利,同样的事情不必重复造轮子。每一种工具或者开发语言都有对应的包管理器,比如Ubuntu的apt-get、Centos的yum、Java的Mavenrepository等等。目前Node.js中最著名的包管理器是NPM,也是生态最好的。什么是NPM?NPM是Node.js中的包管理器。允许我们为Node.js安装各种模块,这个包管理器为我们提供了安装、删除和其他管理模块的命令。这里我们需要注意的一件事是,我们必须有一个package.json文件或一个node_modules目录才能在本地安装模块。执行命令npmimodule-S/D安装模块后,我们安装的依赖会存储在本地package.json的dependencies/devDependencies对象中。例如,如果模块X使用模块A1.0版,模块Y使用模块A1.5版,则模块X或Y都将在本地拥有自己的模块A副本。//模块X{"name":"X","dependencies":{"A":"^1.0"}}//模块Y{"name":"Y","dependencies":{"A":"^1.5"}}什么时候需要NPM包?我们在开发一些Node.js项目的时候,可能会遇到一些需要NPM的地方,比如链接Redis、MongoDB或者发送请求。有了这些已有的模块,我们可以让我们更专注于业务的发展。当然,有时您会有一些特殊需求。这时候你可能需要自己打包一个npm模块来实现模块复用和资源共享。NPM安装NPM不需要单独安装。我们在安装Node.js环境的时候,也安装了NPM。还没有搭建Node.js环境的同学可以参考“3N兄弟”章节帮你完成Node.js环境搭建。在终端执行npm-v命令查看当前npm版本$npm-v5.6.0npm源码设置在国内有时会受到网络因素的限制。通常在安装包管理器之前,可以切换到淘宝NPM镜像来加快安装速度。但是需要注意的是,如果私有模块在npm中是官方的,一定要切换到官方源,否则会出现404错误。查看当前npm源npmconfiggetregistry#http://registry.npmjs.org/切换到淘宝源npmconfigsetregistry=https://registry.npmmirror.com切换到npm官方源当npmpublish需要切换回npm源npmconfigsetregistry=http://registry.npmjs.org如果不想全局设置,也可以在执行npm命令时通过参数npmimodule--registry=https://registry.npmmirror.com传递镜像地址.淘宝NPM镜像启用了新域名注:淘宝NPM镜像启用了新域名,由原来的http://registry.npm.taobao.org改为https://registry.npmmirror.com,目前是旧的NPM镜像地址有301重定向,但是旧的http://npm.taobao.org和http://registry.npm.taobao.org域名将于2022年5月31日0:00停止服务。如果您使用旧域名的开发者可以开始更换。**参考**https://zhuanlan.zhihu.com/p/430580607如何在项目中应用让我们新建一个项目test,一开始是一个空文件夹第一步是在里面执行npminit控制台,根据提示输入信息,会生成一个package.json文件,如下:{"name":"test",//项目名称"version":"1.0.0",//versionnumber"description":"",//Description"main":"index.js",//入口文件,默认index.js"scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"author":"May",//Author"license":"ISC"}第二步是安装npm模块。比如我们安装一个moment模块,执行下面的命令。npminstallmoment-S#ornpmimoment--save安装成功后会生成一个新的目录node_modules,用来存放我们安装的模块,package.json也会发生变化。还有一个额外的依赖对象,用于存储我们的模块版本信息。"dependencies":{"moment":"^2.24.0"}看我们当前的目录结构:npmregisterloginregister$npmadduserUsername:yournamePassword:yourpasswordEmail:(thisISpublic)youremail查看当前用户npmwhoaminpmloginnpmloginprivatemoduleif是私有npm包公司团队或个人项目。发布时要注意。模块名称以@符号开头,/符号结尾,中间部分为私有包的组织名。比如@may/logger,may是组织名,logger是包名。package.json{"name":"@may/logger"}发布npm模块进入项目根目录,输入命令。npmpublish常见问题解答1no_permsPrivatemodeenable,onlyadmincanpublishthismodule:coorddistance这里注意,由于国内网络问题,很多小伙伴将npm镜像代理到了淘宝或者其他地方,这里需要设置回原镜像。npmconfigsetregistry=http://registry.npmjs.orgQuestions2输入意外结束于1:3637npmERR!egistry.npmjs.org/mkdirp/-/mkdirp-0.3.2.tgz"},"engines":{"node":"*"}执行命令npmcacheclean--forceQuestions3Node项目部署私有包报错404一般导致分两种情况:检查服务器是否登录了npm账号执行命令npmconfiggetregistry检查是否指向https,如果没有指向https执行命令npmconfigsetregistry=https://registry.npmjs。组织
