当前位置: 首页 > 后端技术 > Node.js

npm超详细教程

时间:2023-04-03 16:07:29 Node.js

npm超详细教程介绍npm,全称nodepackagemanger。npm是一个开放的Node模块注册和管理系统,是一个标准的Node.js包发布平台,用于Node.js包的发布、传播和依赖控制。网址:https://www.npmjs.com/npm提供命令行工具,可以方便地下载、安装、升级、删除包,也可以让开发者发布和维护包。npm如何使用npm将在以下Node.js时安装。但是可能不是最新版本,需要npminstallnpm@latest-g升级到最新版本。基本命令:#查看npm命令列表$npmhelp#查看各个命令的简单用法$npm-l#查看npm的版本$npm-v#查看npm的配置$npmconfiglist-lnpm使用npminit初始化package.json文件用于初始化和生成package.json文件。在这个过程中,用户会被问到一系列问题。如果你觉得不需要修改默认配置,一路回车即可。如果使用-f(force)和-y(yes),则跳过提问阶段,直接生成新的package.json文件。npmsetset环境变量$npmsetinit-author-name'你的名字'$npmsetinit-author-email'你的邮箱'$npmsetinit-author-url'http://yourdomain.com'$npmsetinit-license'MIT'上面的命令相当于给npminit设置了默认值。后面执行npminit时,package.json的作者名、邮箱、主页、license字段会自动写入默认值。这些信息会保存在用户主目录下的~/.npmrc文件中,这样用户就不用为每个项目都输入。如果项目有不同的设置,您可以针对该项目运行npmconfig。$npmsetsave-exacttrue当上面的命令设置为添加模块时,package.json会记录模块的确切版本,而不是一个可选的版本范围。npmconfig$npmconfigsetprefix$dir上述命令将指定的$dir目录设置为模块的全局安装目录。如果您当前对该目录具有写入权限,则在运行npminstall时不再需要sudo命令授权。$npmconfigsetsave-prefix~上面的命令导致npminstall--save和npminstall--save-dev在安装新模块时将允许的版本范围从克拉符号(^)更改为波浪号(~),即允许从Minor版本升级,只允许补丁升级。$npmconfigsetinit.author.name$name$npmconfigsetinit.author.email$email上面的命令指定了使用npminit时生成的package.json文件的字段默认值。npminfonpminfo命令可以查看各个模块的具体信息$npminfounderscore$npminfounderscoredescription$npminfounderscorehomepage$npminfounderscoreversionnpmsearchnpmsearch命令用于搜索npm仓库,可以是后跟字符串或正则表达式$npmsearchnpmlistnpmlist命令以树状结构列出当前项目安装的所有模块,以及它们所依赖的模块。npmlistnpmlist-globalnpmlistvue加上全局参数会列出全局安装的模块。npminstallNode模块是使用npminstall命令安装的。每个模块都可以“全局安装”或“本地安装”。“全局安装”是指安装一个模块到系统目录下,每个项目都可以调用。一般情况下,全局安装只针对eslint、gulp等工具模块。“本地安装”是指下载一个模块到当前项目的node_modules子目录下,然后这个模块只能在项目目录下调用#本地安装$npminstall#全局安装$sudonpminstall-global$sudonpminstall-g#也支持直接输入Github代码库地址$npminstallgit://github.com/package/path.git$npminstallgit://github.com/package/path.git#0.1.0#强制重新安装$npminstall--force#如果要重新安装所有模块,删除node_modules目录,重新执行npminstall$rm-rfnode_modules$npminstallinstall不同版本install命令总是安装最新版本的模块,如果要安装特定版本的模块,可以在模块名称后加上@和版本号。$npminstallsax@latest$npminstallsax@0.1.1$npminstallsax@">=0.1.0<0.2.0"#如果使用--save-exact参数,package.json文件将指定安装模块精确版本$npminstallreadable-stream--save--save-exact$npminstallsax--save$npminstallnode-tap--save-dev#or$npminstallsax-S$npminstallnode-tap-D#如果要安装beta版本的模块,需要使用以下命令#安装最新的beta版本$npminstall@beta(latestbeta)#安装指定的beta版本$npminstall<模块名称>@1.3。1-beta.3#npminstall默认会安装dependencies字段和devDependencies字段中的所有模块。如果使用--production参数,则只能安装dependencies字段中的模块$npminstall--production#或$NODE_ENV=productionnpminstall以避免系统权限默认情况下,Npm全局模块安装在系统目录(如/usr/local/lib/),普通用户没有写权限,需要sudo命令。这不是很方便,我们可以在没有root权限的情况下安装全局模块。首先在主目录下新建一个配置文件.npmrc,然后在主目录下的文件中定义前缀变量。prefix=/home/yourUsername/npm然后在主目录下新建一个npm子目录$mkdir~/npm之后,全局安装的模块都会安装到这个子目录下,npm也会去~/npm/bin查找命令的目录。最后,将此路径添加到.bash_profile文件(或.bashrc文件)中的PATH变量。exportPATH=~/npm/bin:$PATHnpmupdatenpmupdate命令可以更新本地安装的模块#升级当前项目的指定模块$npmupdate[packagename]#升级全局安装的模块$npmupdate-global[packagename]它会先去远程仓库查询最新版本,然后再查询本地版本。如果本地版本不存在,或者远程版本较新,则会安装。安装时使用-S或--save参数更新package.json中模块的版本号。请注意,从npmv2.6.1开始,npmupdate仅更新顶级模块,而不会更新依赖项。以前的版本是递归更新的。如果你想获得旧版本的效果,使用下面的命令。$npm--depth9999updatenpmuninstallnpmuninstall命令,卸载已安装的模块$npmuninstall[packagename]#卸载全局模块$npmuninstall[packagename]-globalnpmrunnpm不仅可以用于模块管理,还可以用于执行脚本.package.json文件有一个scripts字段,可以用来指定脚本命令,让npm直接调用。npmrun命令会自动将node_modules/.bin目录添加到环境变量$PATH中,所以调用scripts字段中的命令时无需添加路径,避免全局安装npm模块。如果不带任何参数直接运行npmrun,则会列出package.json中所有可执行的脚本命令。npm有两个内置的命令简写,npmtest相当于执行npmruntest,npmstart相当于执行npmrunstart。$npmieslint--save-devpre-和post-脚本npmrun为每个命令提供了pre-和post-两个钩子(hooks)。以npmrunlint为例。在执行这条命令之前,npm会先检查是否有为prelint和postlint定义的两个钩子。如果是,它会先执行npmrunprelint,然后执行npmrunlint,最后执行npmrunpostlint。全局模块(可以在命令行的任何地方使用)本地模块为什么全局模块可以在任何地方直接使用全局模块必须在package.json中配置bin参数!/usr/bin/envnodenpmlink是临时把当前目录改放到global下。在开发NPM模块的时候,有时候我们想边开发边试用。比如在本地调试时,require('myModule')会自动加载本地开发下的模块。Node规定在使用模块时,需要安装在全局或项目的node_modules目录下。对于正在开发的模块,解决方法是在全局的node_modules目录下生成一个符号链接,指向模块的本地目录。npmlink可以起到这个作用,会自动创建这个符号链接。请想象这样一个场景,你开发了一个模块myModule,目录是src/myModule,而你自己的项目myProject需要用到这个模块,项目目录是src/myProject。首先,在模块目录(src/myModule)下运行npmlink命令。src/myModule$npmlink上面的命令会在npm的全局模块目录下生成一个符号链接文件。该文件的名称是package.json文件中指定的模块名称。/path/to/global/node_modules/myModule->src/myModule此时可以全局调用myModule模块。但是,如果我们要在项目中安装这个模块,则必须执行以下步骤。切换到项目目录并再次运行npmlink命令,指定模块名称。src/myProject$npmlinkmyModule上面的命令相当于生成一个指向本地模块的符号链接。src/myProject/node_modules/myModule->/path/to/global/node_modules/myModule然后,你可以在你的项目中加载模块。varmyModule=require('myModule');这样,myModule中的任何更改都可以直接反映在myProject项目中。但是,也存在对myProject目录中myModule的任何修改都会反映在模块源代码中的风险。如果你的项目不再需要该模块,可以在项目目录下使用npmunlink命令删除符号链接。src/myProject$npmunlinkmyModulenpmbin#在项目根目录下执行$npmbin./node_modules/.binnpmadduser$npmadduserUsername:YOUR_USER_NAMEPassword:YOUR_PASSWORDEmail:YOUR_EMAIL@domain.comnpmpublishnpmpublish用于发布当前模块到npmjs.com。执行前需要到npmjs.com申请用户名。#需要从npmjs.com申请用户名$npmadduser#登录$npmlogin#发布$npmpublish#如果当前模块是beta版本,比如1.3.1-beta.3,那么需要使用发布时的tag参数,会发布到指定的标签上。默认发布标签是latest$npmpublish--tagbeta#如果发布私有模块,需要在模块初始化时加上scope参数。只有付费的npm用户才能发布私有模块。$npminit--scope=#如果你的模块是用ES6写的,发布的时候最好转成ES5。首先,需要安装Babel。$npminstall--save-devbabel-cli@6babel-preset-es2015@6然后,在package.json中编写构建脚本。"scripts":{"build":"babelsource--presetsbabel-preset-es2015--out-dirdistribution","prepublish":"npmrunbuild"}运行上面的脚本,源码目录下的ES6会源代码文件,在分发目录下转换成ES5源代码文件。然后在项目根目录下创建.npmignore和.gitignore两个文件,分别写入如下内容。//.npmignoresource//.gitignorenode_modulesdistributionnpmdeprecate如果要丢弃某个版本的模块,可以使用npmdeprecate命令。$npmdeprecatemy-thing@"<0.2.3""criticalbugfixedinv0.2.3"github/npmnpm版本号管理问题semver规范规定版本号由3位数字组成MAJORMINORPATCHMAJOR可能与old不兼容versionsMINORnew添加了一些兼容老版本的APIvue.observablePATCH修复bug都是对应npm版本的git标签npmversionmajorminorpatch会自动关联git版本号表示2.2.0必须是2.2.0^2.2.0限定大版本,只要后面更新不超过2个就可以~2.2.0限定前两个版本,后面的版本只要大于0就可以了=2.0大于本版本<=2.01.0.0-2.0.0预发布版alpha预览版内测版beta测试版公测版rc最终测试版脚本可以配置脚本命令快捷键(可以在脚本中放很长的命令)执行命令会将当前node_modules目录下的.bin文件夹放到全局中(这样可以直接使用)npmrunstart可以简写为npmstartnpxnpx和脚本一致,可以帮助我们运行.bin目录下的内容直接地。如果.bin目录存在,则执行相应的脚本。如果不存在,将下载并运行npx。这只是一个临时的使用计划。npm5.2之后的源切换(npmnrmnvm)npminstallnrm-gnrmls/nrmusepackagepublishing如何发布包首先注册一个npm账号,一定要在官方源上发送npmaddUser添加用户npmpublish发布包参考链接:npmmodulemanager(YifengRuan)