当前位置: 首页 > 科技观察

你可能不知道的实用Npm技巧

时间:2023-03-13 00:56:12 科技观察

大家好,我是CUGGZ。今天分享一些有用的npm技巧!一、npm的基本概念。npm的全称是NodePackageManager。它是一个基于Node.js的包管理器,也是Node.js社区中最流行的包管理器,支持最多的第三方模块。它的初衷是为了让开发者更容易共享和重用代码。npm提供了一个命令行工具,主要功能是管理Node.js的包,包括安装、更新、删除、查看、搜索、发布等。npm最初只是一个Node.js的包管理器,但是随着不断的发展作为前端技术,它的定位变成了一个通用的包管理器,可以管理JavaScript、React、Vue、Gulp、移动开发等包。最大和最环保的包管理器。npm可以解决Node.js模块管理中的很多问题。其常见的应用场景如下:从npm镜像服务器下载第三方模块。从npm镜像服务器下载安装命令行程序到本地。自己将模块发布到npm镜像服务器上,供其他人使用。npm不需要单独安装。安装Node.js时,npm会一起安装。但是安装的npm不一定是最新版本。可以使用以下命令查看本地npm版本:npm-v其中-v是--version的缩写,表示版本。如果要升级npm版本,可以使用以下命令:npminstallnpm@latest-g其中@latest表示最新??版本,-g是--global的缩写,表示全局安装。另外,还可以使用help命令查看npm帮助:npmcommand--help例如查看install的参数形式:npminstall--help其中--help可以简写为-h,即执行结果上面的命令如下,可以看到安装命令的多种形式:npm常用命令:命令功能npm-v查看npm版本。npminit初始化后会出现一个package.json配置文件。可以在末尾加上-y,快速跳过问答界面。npminstall会根据项目中的package.json文件自动下载项目需要的所有依赖。npminstallpackagename--save-dev(npminstallpackagename-D)安装的包只在开发环境使用,生产环境不使用,会出现在package.json文件中的devDependencies属性中。npminstallpackagename--save(npminstallpackagename-S)安装的包需要发布到生产环境,会出现在package.json文件中的dependencies属性中。npmlist查看当前目录下已安装的节点包。npmlist-g查看全局安装的节点包。npm--help查看npm帮助命令。npmupdatepackagename更新指定的包。npmuninstallpackagename卸载指定的包。npmconfiglist查看配置信息。npm指定命令--help查看指定命令的帮助。npminfo指定包名,可以查看远程npm上指定包的所有版本信息。npmconfigsetregistryhttps://registry.npm.taobao.org修改包下载源,这里修改为淘宝镜像。npmroot查看当前包的安装路径。npmroot-g查看全局包的安装路径。npmlspackagename查看本地安装的指定包和版本信息,为空不显示。npmlspackagename-g查看全局安装的指定包和版本信息,空的不显示。说完这些概念,我们再来看看npm在使用时的实用技巧。2.初始化package.json所有npm管理的项目都需要初始化一个package.json文件。你可以使用下面的命令来初始化一个包:npminit执行这个命令时,它会通过问答的形式一步一步地设置它。如果不需要修改默认配置,一路回车即可。如果想跳过向导,快速生成package.json文件,可以执行以下命令:npminit--yes其中--yes可以简写为-y。此时生成的package.json文件的配置项为npm的默认配置。当然,这个默认配置也是可以改变的。可以通过类似下面的形式修改npm的默认配置:npmconfigsetinit.author.nameYOUR_NAMEnpmconfigsetinit.author.emailYOUR_EMAIL执行完上面的命令后,稍后再执行npminit命令时执行,package.json的作者姓名和邮箱会被初始化为我们设置的值。3.快速了解package.json当你要使用一个包时,如果你想知道它是如何使用的,可以使用下面的命令打开包的主页,它会自动启动浏览器并打开这个页面,这里是React例子:npmhomereact如果想查看这个包存在的问题,或者公开的路线图,可以执行以下命令:npmbugsreact如果想查看这个包的代码地址,可以执行下面的命令:npmreporeact如果你想查看这个包的详细信息,可以执行下面的命令:npminforeact执行结果如下:这里是一个JavaScript对象,里面包含了react模块的详细信息,并且可以使用info命令获取该对象的成员信息:npminforeactdescription执行结果如下:4.安装依赖可以使用npminstall命令安装需要的package.如果想自动将这个包添加到package.json中,可以执行以下命令。下面是一个安装React的例子:npminstallreact--save如果你想安装不同版本的包,你可以这样做://安装最新版本npminstallreact@latest//安装指定版本npminstallreact@16.8.0//安装指定版本npminstallreact@">=16.8.0<17.0.1"使用npm安装依赖时,分为本地安装(local)和全局安装(global)。两者的区别在于是否带-g参数:命令缩写说明None将模块安装到本地node_modules目录,但不保存在package.json中。--save-S将模块安装到本地node_modules目录,并保存到package.json中的dependencies配置项。该包的依赖在生产环境中依然存在。--sava-dev-D将模块安装到本地的node_modules目录下,并保存到package.json中的devDependencies配置项中,仅供开发使用。--global-g安装的模块是一个全局模块。如果使用命令行模块,它将直接链接到环境变量。可以使用require关键字导入本地安装的包。为了避免引用的模块消失,保证所有依赖的模块出现在package.json中,最好在npminstall的时候加上--save。需要注意的是,执行npminstall命令时,在npm5之前,只会下载,不会保存依赖信息。如果需要保存,需要加上--save选项。npm5以后可以省略--save选项,自动保存。5.锁定依赖当使用--save安装依赖时,npm会保存依赖并添加^前缀。他说当再次执行npminstall命令时,会自动安装这个大版本下的这个包的最新版本。如果想修改这个功能,可以执行下面的命令:npmconfigsetsave-prefix='~'执行完这个命令后,^符号就会变成~符号。再次安装新模块时,由只允许小版本升级变为只允许补丁包升级。如果想锁定当前版本,可以执行如下命令:npmconfigsetsave-exacttrue这样每次npminstallxxx--save都会锁定依赖的版本号,相当于加上--save-确切的参数。建议所有在线应用都采用这种锁定版本号的方式。为了完全锁定依赖版本,让应用在任意一台机器上都安装相同的版本,可以执行如下命令:项目,它包含了依赖树和由node_modules计算的模块的版本。只要目录下有npm-shrinkwrap.json,运行npminstall时会优先使用npm-shrinkwrap.json中的配置,没有则使用package.json进行安装。6.搜索依赖npm。它为我们提供了搜索npm仓库的搜索命令。搜索参数可以是字符串也可以是正则表达式:npmsearchreact搜索结果如下:当然我们也可以去node.js官网:https://www.npmjs.com/就可以了可能不容易找到合适的依赖包。这时候可以使用网站https://npms.io/,这里量化了每个包的质量、流行度、可维护性等指标。这些指标包括:是否使用过时的依赖,是否配置代码检查,是否测试,最新版本发布时间。推荐使用Openbase搜索合适的包:https://openbase.com/7。更新和卸载依赖npm为我们提供了更新依赖版本的命令:npmupdate[packagename]如果要更新全局安装的模块,需要添加参数-global:npmupdate-global[packagename]执行这两个时命令,它会先去远程仓库查询最新版本,然后再查询本地版本。如果本地版本不存在,或者远程版本较新,则会安装。如果要更新package.json中依赖包的版本,需要使用-S或--save参数。需要注意的是,从npmv2.6.1开始,npmupdate只会更新顶层模块,不会更新依赖模块,而之前的版本是递归更新的。如果你想要这个效果,可以使用以下命令:npm--depth9999update除了更新包,你还可以删除指定的包:npmuninstall[packagename]如果你想删除全局包,你需要添加参数-global:npmuninstall[packagename]-global8。查找过时的包npm提供了查看过期依赖的命令:npmoutdated在项目中执行这条命令,输出结果如下:可以看到,这里列出了过时的依赖包名、当前版本、预期版本、最新版本、依赖于本地路径,项目名称依赖于这个包。您可以使用以下命令查看最新版本的npm包://显示包信息npmviewnpmv//显示最新版本npmvversion//显示所有版本npmvversions9。执行脚本npm不仅可以用来管理模块,还可以用来执行脚本。package.json文件中有一个scripts字段,可以用来定义脚本命令,npm可以使用。除了查看package.json文件中的命令,我们还可以使用如下命令查看所有脚本命令:npmrun在项目中执行该命令后的结果如下:可以看到,dev,build,这里定义了:test和build等命令,如果需要执行这些命令,直接执行即可:npmrundevnpmrunbuild这里就不多说了,这可能是最常用的命令,大家可以根据实际开发情况定制自己的npmOrder。10.安装可靠的依赖你可以使用npmci命令来清理和安装依赖。常用于CI/CD等自动化环境,利用它来获取可靠的依赖。npmci执行这条命令时,会先删除本地的node_modules文件,所以不需要校验下载的文件版本和控制版本的关系,也不需要校验库是否有最新版本,所以下载速度相对来说会比npminstall快一些。然后它将跟随package-lock.json文件安装依赖项的确切版本。并且不会将此版本写入package.json或package-lock.json文件。使用该命令时需要注意:项目中必须有package-lock.json或npm-shrinkwrap.json文件,否则该命令无效。npmci是npmv6新引入的命令,所以使用该命令需要保证npm版本>=5.7。npmci不能用来安装单个依赖,只能用来安装整个项目的依赖。npmci将安装依赖项和devDependencies。整个安装过程不会更新package.json或package-lock.json文件,整个安装过程被锁定。当package-lock.json中的依赖与package.json中的依赖不一致时,npmci会退出而不修改package-lock.json文件。11.删除重复的包我们可以通过运行npmdedupe命令来删除重复的依赖。此命令通过删除重复包并在多个依赖包之间共享公共依赖关系来简化整体结构。它会生成一个扁平的、去重的树。npmdedupenpmddp12,扫描漏洞可以运行npmaudit命令扫描项目,查找所有依赖的漏洞:npmaudit以下是扫描结果:可以运行以下命令自动安装所有漏洞包的补丁版本:npm审计fix13。查看已安装的包可以使用如下命令获取整个项目的包信息:npmlistnpmlist命令以树状结构列出了当前项目安装的所有模块及其依赖的模块。如果添加global参数,则会列出全局安装的模块:npmlist-global还可以查看指定包的依赖关系。比如我正在做的项目下,执行如下命令:npmlistreact也可以使用npmls命令查看指定包的依赖信息:npmlsreact可以使用--depth参数限制搜索深度:npmls--depth=114,测试本地包当我们在本地开发npm模块时,可以使用npmlink命令,将本地的npm模块连接到对应的项目中,方便调试和测试模块。使用方法也很简单。在项目中执行以下命令:npmlink执行该命令后,会在全局创建npm包。路径是{prefix}/lib/node_modules/,这是一个快捷方式。然后我们可以在需要这个模块的项目中使用如下命令链接这个包:npmlinkmodulename这里的模块名是依赖包的名称,是模块的package.json文件中的name字段值包裹。如果不想继续使用,执行以下命令取消链接:npmunlinkmodulename