从三个角度:package.json、版本管理、依赖安装结合具体实例对 npm 的包管理机制进行了详细分析。
在 Node.js 中,模块是一个库或框架,也是一个 Node.js 项目。Node.js 项目遵循模块化的架构,当我们创建了一个 Node.js 项目,意味着创建了一个模块,这个模块必须有一个描述文件,即 package.json。
1.1必备属性
package.json中有很多属性,其中必须填写的只有两个:name 和 version ,他们两个组成 npm 模块的唯一标识。
"name": "vue",
"version": "3.3.4",
npm包命名规则
name 即模块名称,其命名时需要遵循官方的一些规范和建议:
-
包名会成为模块
url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在包名中都不能使用,可以使用validate-npm-package-name包来检测包名是否合法。 -
语义化包名,可以帮助开发者更快的找到需要的包,并且避免意外获取错误的包。
-
若包名称中存在一些符号,将符号去除后不得与现有包名重复
查看包是否被占用
name 是一个包的唯一标识,不得和其他包名重复,我们可以执行 npm view packageName 查看包是否被占用,并可以查看它的一些基本信息
1.2描述信息
"description": "The progressive JavaScript framework for building modern web UI.",
"keywords":["vue"]
description:用于添加模块的描述信息,方便别人了解你的模块
keywords:给你的模块添加关键字。
开发人员
"auther":{
"name" : "ConardLi",
"email" : "lisqPersion@163.com",
"url" : "https://github.com/ConardLi"}
描述开发人员的字段有两个:auther 和 contributors
auther:指包的主要作者,对应一个人
contributors:指贡献者信息,对应多个人
地址
{
"homepage": "http://ant.design/",
"bugs": {"url": "https://github.com/ant-design/ant-design/issues"},
"repository": {"type": "git","url": "https://github.com/ant-design/ant-design"},
}
Homepage:指定该模板的主页。
repository:指定模块的代码仓库。
Bugs:指定地址或邮箱,提出bug。
1.3依赖配置
我们的项目可能依赖一个或多个外部依赖包,根据依赖包的不同用途,我们将他们配置在下面几个属性下:dependencies、devDependencies、peerDependencies、bundledDependencies、optionalDependencies。
配置规则
"dependencies": {"antd": "ant-design/ant-design#4.0.0-alpha.8",
"axios": "^1.2.0",
"test-js": "file:../test",
"test2-js": "http://cdn.com/test2-js.tar.gz","core-js": "^1.1.5",}
依赖配置遵循下面几种配置规则:
依赖包名称:VERSIONVERSION是一个遵循SemVer规范的版本号配置,npm install时将到npm服务器下载符合指定版本范围的包。依赖包名称:DWONLOAD_URLDWONLOAD_URL是一个可下载的tarball压缩包地址,模块安装时会将这个.tar下载并安装到本地。依赖包名称:LOCAL_PATHLOCAL_PATH是一个本地的依赖包路径,例如file:../pacakges/pkgName。适用于你在本地测试一个npm包,不应该将这种方法应用于线上。依赖包名称:GITHUB_URLGITHUB_URL即github的username/modulename的写法,例如:ant-design/ant-design,你还可以在后面指定tag和commit id。依赖包名称:GIT_URLGIT_URL即我们平时clone代码库的git url