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

什么是npm?

时间:2023-04-03 14:29:26 Node.js

npm是nodejs的包管理和分发工具。它可以让javascript开发者更方便的分享代码和分享代码片段,通过npm管理你分享的代码也非常方便、快捷、简单。截至目前,npm最新的稳定版本是3.3.12本文翻译自docs.npmjs.com,有改动。1、安装Nodejs并更新npm如果你是Windows或Mac用户,安装Nodejs最好的方式是从官网下载一个安装包。安装完成后,在控制台输入node-v。如果正确返回节点版本号,则安装成功。安装完nodejs后,你已经有了npm,但是由于nodejs的更新速度比npm慢,所以一般情况下,要将你的npm升级到最新版本,输入以下命令:npminstallnpm-g如果是linux,您可能需要通过sudo以root权限运行。完成后运行npm-v查看当前npm版本号。2.修复npm相关的权限问题如果在全局安装包时遇到EACCES错误,说明你没有权限在npm存放全局包文件的目录下写入文件。这里有两种解决方法:2.1、修改相关目录的权限2.1.1、找到npm全局包文件存放路径npmconfiggetprefix2.1.2、修改权限sudochown-R`user`如果没有'不想更改整个目录您还可以更改子文件夹lib/node_modules、bin和share目录的权限。2.2.修改npm默认的全局包存放目录到新的位置,请参考官网文档https://docs.npmjs.com/gettin...3.npm包的部分安装npm提供两种包安装方式:部分安装和全局安装。您可以根据项目用途选择安装方式。如果你的项目依赖某个包,建议在本地安装该包。在其他情况下,比如你想在命令行工具中使用这个包,你可以选择全局安装。3.1.安装要安装npm包,可以使用以下命令:npminstallpackage-name这将在当前位置创建一个node_modules文件夹(如果该目录不存在),并将包文件下载到该目录。安装完成后,可以看到node_modules目录下多了几个文件夹。注意:一般情况下,如果安装失败,该目录会被删除。3.2.安装时如何选择包版本如果当前目录下没有package.json文件,执行install时会默认安装最新版本的包。如果当前目录下有package.json文件,则会根据文件中声明的版本进行安装。3.3.使用已安装的包一旦安装了包,您就可以在您的代码中使用它。示例:您创建一个Node模块并使用它。安装lodash后,创建一个文件index.js并输入以下代码:varlodash=require('lodash');varoutput=lodash.without([1,2,3],1);控制台日志(输出);执行nodeindex.js,会输出[2,3]3.4。使用package.json和--save标志另一种管理本地npm包的方法是在本地目录中创建一个package.json文件。如果项目根目录下有package.json文件,那么在执行install时npm会检查依赖关系并选择合适的版本进行安装。这使您的依赖环境可重现,这意味着您可以与其他开发人员共享它。在项目目录中创建一个package.json文件并输入以下内容:{"name":"demo-app","version":"1.0.0"}使用--save标志下载一个包npminstalllodash--保存这将在下载包文件之前修改package.json文件的依赖项字段。现在打开我们刚刚创建的package.json文件,我们会发现一个额外的dependencies字段。3.5.在package.json中手动添加依赖也可以在package.json中手动添加依赖,例如:{"name":"demo-app","version":"1.0.0","dependencies":{"lodash":"^2.4.1","tap":"*"}}运行npminstall,执行后会发现node_modules中包含lodash和tap两个包。需要注意的是,如果已经安装了一个包,即使满足package.json的语义版本规则,npminstall也不会更新到最新版本。因此,可靠地将所有包重新安装到满足package.json语义版本规则的最新版本的方法是删除node_modules文件夹并运行npminstall4.更新本地安装的包我们项目依赖的包可能会定期或执行更新不规律的。如果我们要使用更新后的新功能,需要将本地安装的软件包更新到新版本。只需在包含package.json的目录中运行npmupdate。npmoutdated可以检测包的当前版本和最新版本,通过它他可以看到哪些包是过时的,但是它不会对本地包做任何改动。5.卸载本地安装的软件包可以通过npmuninstallpackage命令卸载本地安装的软件包npmuninstalllodash卸载时如果想去掉package.json依赖,可以使用--save标志npmuninstall--savelodash6.全局安装npm包你可以根据自己的情况选择是否全局安装一个npm包。如果想全局安装,可以通过npminstall-gpackage-name安装。npminstall-gjshint如果提示EACCES错误是因为权限问题。可以参考前面的相关章节,或者使用sudo切换到root权限sudonpminstall-gjshint7.更新全局安装的软件包如果要更新全局安装的软件包,可以使用npminstall-gpackage-namenpminstall-gjshint如果你知道哪些软件需要更新,你可以使用npmoutdated-g--depth=0命令如果你想更新所有全局安装的包,使用npmupdate-g命令。8.卸载全局安装的软件包卸载全局安装的软件包,使用npmuninstall-gpackage-name命令npmuninstall-gjshint9.创建Node.js模块Node.js模块是一种可以被发布到对于npm包,当你想创建一个新的模块时,你首先需要创建一个package.json文件。你可以通过npminit创建一个package.json,它会引导你输入一些package.json字段信息。必须输入两个选项,即模块名称和版本号。你还需要输入一个名字作为入口程序的名字,默认是index.js如果你想在作者字段中添加信息,你可以使用以下格式:YourName(http://example.com)package.json文件创建完成后,还需要创建一个文件,在模块加载时执行。如果你在上一步中使用了默认名称,那么文件名为index.js文件中的exports对象添加一个函数属性exports.printMsg=function(){console.log("Thisisamessagefromthedemopackage");}测试:将你的包推送到npm在项目外创建一个空目录执行npminstallpackage-name创建一个test.js文件,需要你的包名,然后执行上面的方法执行nodetest.js,上面函数中的代码会输出十、推送包到npm库你可以推送任意一个包含package.json文件的文件夹,比如node模块注册账号要发布软件包,就必须有npm账号,如果没有,您可以使用npmadduser创建一个。然后使用npmlogin登录。由于网络问题,我无法登录。所以,更多信息,请参考https://docs.npmjs.com/gettin...11.SemanticVersioningSemanticversioning是一个标准,用于声明在什么维度可以更新当前依赖项。语义版本发布规范如果一个项目被发布,它的版本号必须从1.0.0开始,虽然npm上的一些项目不遵循这个标准。之后,版本更新应遵循以下原则:bug修复和其他小改动:补丁发布,增加最后一个数字,如1.0.1在不破坏现有功能的情况下添加新功能:小版本,增加中间数字,如1.1.0Changesthatbreakbackwardcompatibility:majorversion,增加第一个数字,例如2.0.0更多信息,请参考https://docs.npmjs.com/misc/s...12.scoped-packagesscoped就像nmpmodules的命名空间。scoped-package包名以@开头,作用域为“@”和“/”之间的部分。@scope/project-name每个npm用户都有自己的范围@username/project-name您可以从CLI文档中获取有关范围的更多详细信息。12.1.更新npm并登录。如果要通过命令行登录npm,必须将npm升级到2.7.0或更高版本。sudonpminstall-gnpmnpm登录12.2。初始化一个scoped-package通过在包名前添加scope来创建一个scoped-packageinit--scope=username也可以给npm配置的scope字段设置一个值,这样以后就可以直接使用scope了。initnpmconfigsetscopeusername12.3,默认发布一个scope-package在此状态下,scopedpackage是private的。如果您想将其发布为私有模块,则需要一个付费帐户。但是,您可以免费将scoped包发布为公共包,只需在发布时配置访问选项即可。npmpublish--access=public12.4,usescope-package要使用scope-package,引用时需要填写完整的scope-package名称,类似如下package.json{"dependencies":{"@username/project-name":"^1.0.0"}}如果要使用npminstall@username/project-name--save命令行代码中引用语句varprojectName=require("@username/project-name")十三、WorkingwithnpmOrganizations,请参考https://docs.npmjs.com/gettin...2017.10.10更新如下:1.从npminstall开始,使用npminstall命令安装模块到node_modules目录。$npminstall在安装之前,npminstall会先检查node_modules目录下是否已经存在指定的模块。如果存在,则无需重新安装,即使远程存储库已经有新版本。如果你想让npm强制重新安装一个模块,不管它是否已经安装,你可以使用-f或--force参数。$npminstall--force2.npmupdate如果要更新已安装的模块,需要使用npmupdate命令。$npmupdate会先去远程仓库查询最新版本,再查询本地版本。如果本地版本不存在,或者远程版本较新,则会安装。