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

【关于NPM】看看NPM是怎么运作的

时间:2023-04-04 01:15:53 Node.js

如果你写js,或者使用hexo等博客工具,对npm应该不会陌生。npm是Node.js的包管理器,背后是Node.js的社区生态在支撑。今天就来聊聊npm的玩法,包括常用的命令和参数以及具体场景下的用法。前言今天只讲npm,相关辅助工具大家可以留言。使用help可以用好几乎所有的命令行工具/程序(CommandLineTool)都会有help命令或者--help参数。如果没有,要么是程序本身只是为了第三方API调用,要么是开发者不够专业。程序开发得再好,如果目标受众无从知晓其用途,那么就等于不存在。npm的帮助功能非常好。直接运行npmhelp或npm--help,你会得到如下结果。可以看到这里已经列出了所有的命令,如果想了解具体命令的用法,可以直接跟在help后面的命令名,或者直接执行命令,在npm后面加上--help参数helpinit#ornpminit--help不同的是help命令Documentsthatwillshowdetails,即调用浏览器打开本地html页面。根据您的npm版本,您可能需要添加-lor--long参数,而--help参数将显示简短说明。是的看到init有两个别名,分别是create和innit,还有四个参数,分别是--force-f,--yes-y--scope,这里要注意-f和-y,它们是-的简写-force和--yes分别对应,对应的结果是一样的。其实这是CLI(CommandLineInterface)设计的通用规范。您可以在其他命令行程序中找到类似的用法。npmhelp最厉害的地方在于,如果你不知道具体的命令名,或者只是想知道某个知识点,那么它也可以做模糊搜索。命令的用法同上。例如,npmhelpscri会得到npm它会列出所有它认为可能的项目供你参考。有兴趣的可以通过npm-l找到更详细的用法。从项目的创建到发布,我们都会经历这个过程,在开发过程中会按照npm的地方去处理。初始化项目就是创建一个package.json文件,npm中it#可选使用-y|--yes参数快速跳过问答,直接创建默认配置。一般情况下,就可以开始安装相应的依赖了。但在某些情况下,您可能要为切换注册表和设置代理的麻烦。甚至不同的项目可能会有不同的私有包位于不同的私有npm仓库中。因此,设置注册表和代理也是设置注册表的常用命令。我们先运行help看看npmconfig--helpSee能得到什么信息!对应的CURD操作一目了然,所以我们可以这样设置代理和npm源npmconfigsetregistryhttps://registry.npm.taobao.orgnpmconfigsetproxyhttp://127.0.0.1:1080是的是的,帮助是如此强大和方便。看完这篇,如果你动手能力强,可以直接练习(当然最好看完)。这里需要说明的是,设置代理后,类似于node-sass、electron等需要执行postinstall脚本的包,下载时也会套用这个代理设置。创建一个适合项目的配置文件,可以直接在项目的根目录下创建一个.npmrc文件,以键值对的形式写入上面对应的配置项,之后会在项目范围内生效saving.registry=https://registry.npmjs.orgsass_binary_site=https://npm.taobao.org/mirrors/node-sass/同样,全局生效的.npmrc在你的用户目录下。当两者都存在时,将首先应用项目下的配置。安装依赖就不多说了,先运行helpinstall即可,功能和参数会比较多。再过一遍。首先,当没有参数时,将安装package.json中的所有依赖项。在正常情况下,所有三种类型的依赖项:dependenciesdevDependenciesoptionalDependencies都会被安装。(如果你想知道所有四个依赖(还有一个peerDependencies)细节,你可以通过npmhelppackage.json来参考它)。install的路径可以是包名、本地文件或git地址。安装有几个参数编号,前三个表示将安装的依赖划分为指定的依赖类型。--save-exact与npm执行的升级策略有关,这里不再赘述。上一个你应该猜到它的作用了,它只是安装,并没有将依赖信息保存到package和json中。事实上,install和其他命令可以添加比这里列出的更多的参数。也可以通过--registry参数Source指定本次安装使用的npm,或者使用--no-proxy指定本次不使用代理,使用--save-exact指定根据package.json中的版本号,避免烦人的自动向上更新策略等。这些参数可以累加,具体使用方法和可用参数请参考npmhelpinstall给出的文档。这里只是一些简单的提醒。开发过程中有很多共性问题,很多问题都是在关键时候出现的。比如你要安装一个包,死活安装不上,各种报错……这里简单罗列几个可能遇到的常见的.unexpectedtoekn|json|html。出现这个问题一般有两种原因,或者,你开了代理,但是使用的npm源无法被代理服务器访问;或者,你最后一次CTRL+C导致npm缓存出现问题,你需要npmcacheclean命令,记得加上--force。我们只建议你在走投无路的时候尝试一下,因为在node_modules机制下,缓存更珍贵?。EPERM基本上在出现这个错误的时候,错误信息已经告诉你是权限问题了。在Unix系统下,sudo是需要执行的,在WindowsNT下,需要以管理员身份执行命令提示符。同一个项目,Jack新添加的项目依赖Lucy的安装,然后错误不断。您可能会被semver版本策略捕获。具体的可以通过npmhelpupdate查看详细的升级策略,具体的解决方法是可以请教别人在执行install命令的时候加上--save-exact参数。对于发布,除了publish还有一个比较有用的命令,就是whoami。可以查看如果当前注册表下登录的用户没有登录或者注册的注册表不正确,会报错。会给出结论。事实上,大多数内容在npm文档中可用。我只列出了一些常用的和一些使用技巧。help命令的使用与大多数CLI应用程序类似,因此您可以自己尝试一下。如果有更好的建议或错误需要指出,欢迎留言。就这样。