NPM,NodePackageManager,是JavaScript编程语言的包管理器。任何使用Javascript的开发人员都使用过这个出色的CLI工具来为他们的项目安装依赖项。在本文中,我将分享NPM提示和技巧,它们将提高您的工作效率并让您更明智、更高效地使用NPM。1.初始化包我们可以运行npminit命令来初始化包,但它会询问有关包、作者等的信息。还有另一种方法可以使用npminit-y命令自动生成我们的package.json。npminit-y我们还可以使用npmconfig命令设置一些默认的初始化配置,比如作者详情等。npmconfigsetinit-author-name"AnkitJain"npmconfigsetinit-author-email"ankitjain28may77@gmail.com"然后运行??npminit-y自动生成我们的包:{"name":"","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"keywords":[],"author":"AnkitJain","license":"ISC"}我们也可以使用npmconfig配置自己的javascript文件来扩展npminit的功能:npmconfigsetinit-module2。从不同来源安装包NPMCLI还允许从其他来源安装javascript包,例如Bit、tarball文件、GitHub、Bitbucket和gist。#InstallacomponentfromBit(setBitascopedregistry)npmconfigset@bit:registryhttps://node.bit.devnpmi@bit/username.collection.component#Installfromtarballstoredlocallynpmi./local-tarball-package.tgz#Installtarballpackagefrominternetnpmihttps://abc/xyz/package.tar。gz#Installfromgithubreponpmigithubuser/reponame#Installfrombitbucketreponpmibitbucket:bitbucketuser/reponame#Installfromgistnpmigist:gistID例如:从Bit安装一个按钮组件假设我需要一个按钮组件,我的一个队友已经将按钮组件发布到我们在Bit上的组件集合中。首先,将Bit配置为scope(scopepackage)npmconfigset@bit:registryhttps://node.bit.dev然后,我去我团队的组件集里找按钮:找到按钮组件,复制安装命令,安装它使用NPMnpmi@bit/the_a-team.imperfect-components.button我的团队名称:“TheA-Team”。我们的组件集名称:“不完美组件”。例如:从npm企业私有库安装Icon组件比如我需要在项目中安装一个Icon组件,我的一个队友已经将button组件发布到了npm企业私有库。我们也可以使用scope来关联企业私有库。这样就可以同时使用npm公共仓库和其他私有仓库中的一些模块:npmconfigset@xscope:registryhttps://xxx.com/npm/多源安装:user-insensitive每次用户都需要使用私有仓库切换npm镜像路径,使用npmpreinstallhook,在项目的package.json中添加preinstall要执行的脚本,让小伙伴无感知安装//在执行npminstall命令前,npm会自动执行npmpreinstallhook"scripts":{"preinstall":"node./bin/preinstall.js"}配置./bin/preinstall.js:const{exec}=require('child_process');exec('npmconfiggetregistry',function(error,stdout,stderr){if(!stdout.toString().match(/registry\.x\.com/)){exec('npmconfigset@xscope:registryhttps://xxx.com/npm/');}});3.全新安装依赖项我们可以运行npmci来全新安装我们的软件依赖项。它通常用于CI/CD平台等自动化环境。npmci与npminstall的区别在于:会根据package-lock.json安装依赖包,可以保证整个开发团队使用完全相同版本的依赖,避免浪费时间排查不一致导致的各种问题dependencies在奇怪的问题上它安装了package-lock.json文件中提到的包的确切版本,不需要计算来解决依赖满足问题,这可以大大加快节点模块安装过程在大多数情况下它首先删除现有的node_modules,然后freshinstall不会写package.json或任何packagelocks:安装基本冻结npminstall只能安装单个依赖包,npmci只能一次安装整个项目所以依赖包,不能安装一个单依赖包另外,如果package-lock.json过时(与package.json冲突),那么npmci会报错very贴心,以免项目依赖陷入过时状态。注意:如果您使用npmci,请不要忘记将package-lock.json添加到git存储库。4.使用快捷方式安装包这是最有用的功能,可用于在安装包时节省时间:#InstallpackagenpminstallShortcut:npmi#InstalldevDependenciesnpminstall--save-devShortcut:npmi-D#Installdependencies(Thisisdefault)npminstall--save-prodShortcut:npmi-P#Installpackagesgloballynpminstall--globalShortcut:npmi-g在一个命令中安装多个包:npmiexpresscheerioaxiosinstalls具有相同前缀的多个包:npmieslint-{plugin-import,plugin-react,loader}express5。NPMscriptsNPMscripts是最有用的功能。除了预定义的pre-hooks和post-hooks(俗称生命周期脚本),它还支持自定义脚本,例如:preinstall:它会在安装任何依赖包之前运行我们也可以在项目中运行npmrunenv列出项目中存在的所有npm环境变量。包括以npm_package_为前缀的包属性。npmrunenv输出:npm_config_save_dev=npm_config_legacy_bundling=npm_config_dry_run=npm_config_viewer=man..npm_package_license=ISC#Packagepropertiesnpm_package_author_name=AnkitJainnpm_package_name=npm-tips-and-tricks#Nameofourpackage我们还可以在process.env.env.nvariablepm_中访问其他变量。在package.json中配置自己的变量我们可以在package.json文件中定义config,将自己的变量定义为npm环境变量,前缀为npm_package_config_,如下:"config":{"myvariable":"HelloWorld"},现在,让我们检查环境变量:npmrunenv|grepnpm_package_config_output:npm_package_config_myvariable=HelloWorld定义我们的自定义脚本npmrun命令将显示我们在package.json文件中定义的所有脚本。让我们在package.json中添加一些自定义脚本:"scripts":{"test":"echo\"Error:notestspecified\"&&exit1","start":"nodeindex.js","echo-hello":"echo\“你好\”“,”echo-helloworld“:”echo\“Helloworld\””,”echo-both“:”npmrunecho-hello&&npmrunecho-helloworld“,”echo-both-in-parallel“:”npmrunecho-hello&npmrunecho-helloworld","echo-packagename":"echo$npm_package_name","echo-myvariable":"echo$npm_package_config_myvariable","echo-passargument":"npmrunecho-packagename--\"hello\"","echo-pipedata":"cat./package.json|jq.name>package-name.txt"},运行以下命令:npmrun复制代码输出:#npm-tips-and-tricks(nameofourpackage)Lifecyclescriptsincludedinnpm-tips-and-tricks:testecho“错误:notestspecified”&&exit1startnodeindex。js可用通过`npmrun-script`:echo-helloecho"Hello"echo-helloworldecho"Helloworld"echo-bothnpmrunecho-hello&&npmrunecho-helloworldecho-both-in-parallelnpmrunecho-hello&npmrunecho-helloworldecho-packagenameecho$npm_package_nameecho-myvariableecho$npm_chopackage_config-runechoname-myvariable"hello"echo-pipeddatacat./package.json|jq.name>package-name.txt运行一个简单的npm脚本:npmrunecho-hello#Output>echo"Hello"Hello在一个npm脚本中运行多个脚本:us可以使用&&运行多个脚本两个脚本都是串行运行的,即一个接一个地运行。npmrunecho-both#Output>npmrunecho-hello&&npmrunecho-helloworld>npm-tips-and-tricks@1.0.0echo-hello>echo"Hello"你好>npm-tips-and-tricks@1.0.0echo-helloworld>echo"Helloworld"Helloworld我们还可以使用&并行运行多个脚本。npmrunecho-both-in-parallel#Output>npmrunecho-hello&npmrunecho-helloworld>npm-tips-and-tricks@1.0.0echo-hello>echo“你好”>npm-tips-and-tricks@1.0.0echo-helloworld>echo"Helloworld"HelloHelloworld在npm脚本中使用npm环境变量另一个npm脚本的参数我们可以使用--将参数传递给npm脚本。在下面的示例中,我们将hello作为参数传递给echo-packagename脚本。npmrunecho-passargument#Output>npmrunecho-packagename--"hello">npm-tips-and-tricks@1.0.0echo-packagename>echo$npm_package_name"hello"npm-tips-and-trickshello使用管道从npm传输数据脚本管道到另一个脚本6.快速导航到包文档我们可以通过简单地运行快速导航到任何npm包的文档:一个npm包,我们也可以通过运行命令导航到网站:npmbug类似地,npmrepo在浏览器中打开GitHubrepo页面。7.删除重复的包我们可以通过运行npmdedupe命令来删除重复的依赖项。它通过删除重复的包并在多个依赖包之间有效地共享公共依赖关系来简化整体结构。这会产生一棵扁平的去重树。npmdedupeornpmddp8。扫描应用程序漏洞我们可以运行npmaudit命令来扫描我们的项目以查找任何依赖项中的任何漏洞。它将以表格格式生成漂亮的输出并显示(我们也可以获得JSON格式的输出),其他包如果是多级/多依赖关系则依赖于此包。npmauditfix将自动安装所有漏洞包的补丁版本(如果可用)npmauditfix9。检查环境我们可以使用npmdoctor命令在我们的环境中运行多项检查,例如,我们的npmCLI是否有足够的权限来安装javascript包,它是否能够连接到npm注册表。它还检查节点和npm版本,验证损坏包的缓存。npmdoctor10.在本地测试你的包NPM提供了npmlink命令,这样我们就可以迭代地处理和测试包。NPMlink将在全局npm模块文件夹中创建一个指向我们测试包的符号链接,我们可以通过运行npmlink将这个包安装到我们的测试应用程序中,这将创建一个从全局安装到我们项目的包到node_modules目录的符号链接。这在测试本地包或使用本地npm包时非常有用。cd/test-package(packagenameishelloworld)npmlink#Globalsymlinkcreatedcd/applicationnpmlinkhelloworld#Createsymlinkinnode_modules11。检查包是否过期我们可以使用npmoutdated命令检查所有过期的npm包。它还显示了应该为过时的软件包安装的最新版本。npmoutdated--longornpmoutdated-l我们还可以通过简单地运行来检查任何npm包的最新版本:12.列出所有已安装的包通过运行npmlist命令,我们可以列出项目中安装的所有npm包。它将创建一个显示已安装包及其依赖项的树结构。对于npmlistornpmls,我们可以使用--depth标志限制搜索深度:npmls--depth=1结论在本文中,我们学习了一些有用的NPM提示和技巧,可用于提高开发效率。欢迎在评论区提出更多NPM小技巧。作者:前端瓶子君链接:https://juejin.im/post/5f15bb1ce51d45348b76207f来源:掘金