关于npm 5.0的新坑,主要包括以下几个方面:
1. 本地缓存机制
npm 5.0 引入了改进的本地缓存机制,该机制现在默认启用。新机制把每个依赖的模块和它们的元数据缓存到本地,并且这些缓存值不再被视为是全局的(即使你通过 -g 安装)。这样,如果你在两个项目中都使用一个版本号,它们将共享所存储的模块,并且模块只会被下载一次。如果你删除了某个模块,它将保留在缓存中,这样再次安装时会更快。
该新机制解决了以前缓存中出现的各种问题,例如依赖模块的版本不匹配、缺少模块和速度慢等。
2. "package-lock.json"和 "npm-shrinkwrap.json"问题
npm 5.0 引入了一个名为 package-lock.json 的新文件,其目的是记录项目依赖的确切版本号和下载的包含安全补丁的安装程序。 此文件会指定模块的依赖关系,并保存这些依赖关系,以便确保在以后重新构建时安装的依赖关系与之前相同。 如果缺少包,则会按需下载。
这个新文件有很多好处,包括解决了复制依赖问题和安全漏洞等,但它们也会带来一些问题,例如版本号错误、冲突、不透明和难以导航等。 另外,如果你的项目中使用了npm-shrinkwrap.json,则在升级到 npm 5.0 之后,必须删除该文件,并替换为 package-lock.json。
以下是两种示例说明:
示例一
假设你有一个项目,项目使用了一个叫做 "lodash" 的第三方依赖库。在package.json文件中,你设置了依赖版本为 "^3.0.0"。当你运行npm install时,npm 5.0 将下载 "lodash@3.10.1" 和一些其他内容,并将其缓存到本地。
在相同的项目目录下,你再次安装另一个项目,这个项目同样使用了 "lodash",要求版本为 "^3.0.0"。 这时候,npm 5.0 只会下载 "lodash@3.10.1"的元数据,并且使用本地缓存中的 "lodash",这样就不必再下载一次。
示例二
在项目中添加一个新模块时,npm 5.0 将在 package-lock.json 填写新值。 如果npm 5.0 无法解决依赖关系,则会引发错误。这时候,你需要根据错误消息,手动调整 package-lock.json 文件中的依赖关系,以解决依赖关系。 然后,运行 npm install,就可以在本地缓存中下载所需的模块,以及它们的元数据。
总结一下,npm 5.0 相比于以前的版本,有很多变化,包括本地缓存机制和 package-lock.json 文件。新的本地缓存机制使得安装速度更快,并解决了以前的各种问题。 package-lock.json 文件则有助于确保不同机器和开发人员之间的一致性,并可以解决依赖关系的版本冲突问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单谈谈关于 npm 5.0 的新坑 - Python技术站