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

[Node]CommonJS包规范和NPM包管理

时间:2023-04-03 13:36:11 Node.js

NPM实现了CommonJS包规范规范,帮助我们安装和管理依赖包,让Node项目的第三方模块更加规范和方便,所有共享插件都可以在NPM平台上找到。1.CommonJS包规范CommonJS包规范的定义分为两部分:用于组织文件目录的包结构和用于描述包信息的包描述文件package.json。1.1包结构包相当于一个存档文件,可以压缩成.zip或tar.gz,安装时可以解压恢复。完全符合CommonJS包规范的目录包含以下文件:|--.bin//存放可执行二进制文件|--lib//存放Javascript文件|--doc//存放文档|--test//存放unittestsUsecase|--package.json//包描述文件1.2包描述文件包描述文件package.json是包根目录下的JSON文件。NPM的所有行为都与package.json中的字段相关,Node程序的依赖也体现在这些字段上。CommonJS包规范定义了package.json中的字段。NPM实现时,CommonJS包规范中的字段也被选中并添加。常用的字段有:name:包名;描述:包描述;keyword:关键字数组,在npm中使用分类搜索;存储库:代码托管位置列表;homepage:当前包的URL;错误:用于报告错误的电子邮件地址或URL;dependencies:使用当前包需要的依赖包列表,npm根据该属性自动加载依赖;devDependencies:后续开发时需要安装的依赖包列表;main:模块入口,使用require()导入时首先检查该字段。如果main字段不存在,Node会按照模块文件所在位置的规则,依次在包目录下查找index.js、index.node、index.json;scripts:包管理器用来安装、编译和测试包的命令对象。bin:配置包的bin字段后,可以通过npminstallpackage_name-g将包添加到执行路径,然后就可以“全局”使用了。2、npm管理NPM帮助Node完成第三方模块的发布、安装和依赖。可以直接执行$npm查看所有命令。使用$npminit快速生成package.json文件。2.1npminstall的原理使用npminstall安装依赖包是npm最常用的功能。例如执行npminstallexpress后,npm会向registry查询模块压缩包的URL。下载压缩包后,npm会在当前node_module目录下创建一个express目录。解压包并在此处恢复。Registry是NPM模块仓库提供的查询服务。比如npmjs.org的查询服务URLhttps://registry.npmjs.org/,加上模块名https://registry.npmjs.org/vue就可以得到所有Vue模块的版本信息JSON对象也可以使用$npmviewvue查询。Node项目使用require('express')导入express模块??时,require()方法在进行路径分析时遵循模块路径搜索策略,沿着当前路径一步步搜索node_module目录,最终定位到express目录.packages的安装和modules的引入相辅相成,可以进一步理解Node模块加载的原理2.2npminstall使用npminstall,packages和package.json的依赖默认保存在dependencies中,但是一些额外的flags可以用来控制它们的保存位置和方法:-P或--save或--save-prod:依赖依赖,默认值。-D或--save-dev:取决于devDependencies。-O或--save-optional:取决于optionalDependencies。--no-save:防止包依赖被保存在dependencies中。例如,npminstallexpress-D将在devDependencies中保存express依赖项。npm安装模块时,经常会纠结是安装在devDependencies还是dependencies中。从字面上看,前者用于生产环境,后者用于开发环境。在官方定义中,如果环境变量NODE_ENV设置为production,npm在执行npminstall--production时会默认安装dependencies中的依赖,而不会安装devDependencies中的依赖。并且建议在dependencies中配置正式运行时必须依赖的插件。devDependencies通常用来存放我们的开发或测试工具,比如Webpack、Gulp、babel、eslint等。在实际开发过程中,Node包的安装是基于require/import模块机制。不管是-P还是-D命令,都会把依赖下载到node_modules文件夹下。-P或-D只是修改依赖对象。在安装这个库的时候,开发调试的时候,可以通过npminstall,一键安装这两个目录下的所有依赖。2.3全局安装使用-g或--global将包安装为“全局可用”,但需要注意的是,全局安装并不意味着将模块包安装为全局包,也不能引入require()。-g命令其实就是将模块包安装在“全局”的node_module中,即与Node可执行文件同路径下,通过配置bin字段链接。例如使用命令行查看Node可执行文件的位置:$whichnode/usr/local/bin/node那么全局安装模块的实际位置是/usr/local/lib/node_modules(使用command+Finder键中shift+G快捷键访问隐藏目录)更多NPM的使用可以看NPMDOCS,NPM更多命令NPMCLI,继续加油,永远的十八岁少女~