刚接触 Node Package Manager (npm) 和开放源代码开发的 COM 和 VSTO 加载项开发人员经常对此类开发的某些方面感到惊讶和惊慌。 本文旨在向此类开发人员保证他们可能会感到不安的事情。
npm 依赖项树
npm 是 JavaScript 运行时环境 Node.js 的标准包管理器。 它用于简化 JavaScript 开发工作流,使开发人员能够安装开放源代码库和工具 (统称为“包”) ,并管理包依赖项。
npm 依赖项树是一种分层结构,表示 Node.js 项目所依赖的所有包。 树中的每个节点都是一个包,其子节点是它所依赖的包。 此结构可以深入嵌套,尤其是在大型项目或使用具有许多可传递依赖项的包时。
运行 npm install时,npm 会读取开发项目中的package.json和package-lock.json文件,以生成此树并提取所需的包。
了解 npm install 警告
运行 npm install时,通常会在控制台中看到一系列警告。 这起初可能令人惊讶,但这是在 Node.js 和开放源代码生态系统中工作的正常部分。 Microsoft调用 npm install的工具(包括 Office 加载项的 Yeoman 生成器)报告这些相同的警告。
本文讨论可能报告的各种警告 npm install 都超出了本文的范围,但有两种警告特别可能让刚接触 Node.js 的开发人员感到不安。
弃用警告
这些警告意味着依赖项树中某个包的管理员不再对其进行维护,并且可能会在将来某个时间将其从 Internet 中删除。 你和Microsoft都无法控制包弃用警告,但你几乎总是可以忽略它们。 弃用并不意味着包已停止工作。 它仍然有效,并且由于安装会将它的副本放在您的计算机上,因此即使包已从 Internet 中删除,将来仍将继续与项目一起工作。 包不是 Web 服务。
对于依赖项树 顶部 的包,你不太可能看到弃用警告,但有可能。 这些是项目package.json文件的“依赖项”或“devDependencies”部分中显式列出的包。 可以忽略“devDependencies”的弃用警告,原因与前面给出的原因相同:代码将复制到开发计算机。 “依赖项”部分中的包在运行时由外接程序使用,但在使用 Microsoft 工具(例如 Office 外接程序的 Yeoman Generator)和 Microsoft 365 代理工具包 等工具创建的项目中,即使这些包的弃用警告也会被忽略,因为这些工具会在外接程序的 Web 服务器提供的 JavaScript 代码捆绑包中包含库副本。
注意
在“依赖项”部分中弃用库是令人关注的一种情况是:
- 库位于“依赖项”部分,因此可以在本地测试和调试时使用它。
- 在为过渡或生产部署外接程序时,计划不会在服务器托管的代码中包含库的副本。
- 相反,你计划让外接程序从托管 npm 库的 Web 服务(如 unpkg.com 或 cdn.jsdelivr.net)加载库。
如果这描述了部署策略,则在从 Web 服务中删除已弃用的库时,部署的加载项可能会停止工作。 因此,请将弃用警告视为需要重新设计加载项的通知,使其不使用已弃用的库。
安全或审核警告
安全警告(也称为审核警告)意味着依赖项树中有一个包版本,该版本具有黑客可以利用的已知安全漏洞。 Microsoft定期检查工具创建的项目中是否存在这些警告并对其进行修复,通常是通过将库更新到没有漏洞的较新版本来修复这些警告。 但是,几乎每天都会发现新的漏洞并将其报告给监视的安全警报数据库 npm install ,Microsoft并不总是立即修复这些漏洞。 因此,在外接程序项目中运行 npm install 报告安全漏洞的情况并不少见。
当依赖项可以跟踪到package.json的“devDependencies”部分中的顶级包时,可以忽略它。 代码仅在您的计算机上运行,你不会自行攻击。
如果依赖项跟踪到“依赖项”部分中的顶级包,或者你无法确定顶级包,则应在将外接程序部署到生产环境之前尝试修复该漏洞。 Internet 上有很多关于如何处理 npm 包中的漏洞的好信息。 我们将在这里提及一种技术。 某些漏洞可以通过 npm 自动修复。 只需在 package.json 文件所在的文件夹中运行 命令 npm audit fix 即可。 如果包的较新版本没有漏洞,而较新的版本与易受攻击的版本没有任何重大更改,则 npm 会自动将包更新到安全版本。
另一种策略是每几周花费几分钟时间,使用与创建原始项目相同的Microsoft工具创建新的外接程序项目。  (为项目类型、语言、Office 应用程序等选择相同的选项 ) 如果 npm install 不再报告新项目的安全漏洞,则Microsoft已在项目模板中修复它。 可以使用以下步骤将修补程序移动到项目。
- 从新项目复制原始项目 package.json 中的同一节的“依赖项”部分。
- 从原始项目中删除 node_modules 文件夹。
- 在原始项目中运行 npm install。
错误
npm 错误与警告不同,会立即停止处理 npm 命令,包括 npm install。 必须诊断并解决问题。 有时,当 npm 尝试提取包时,此错误是临时网络问题的副作用。 尝试重新运行 npm install。
注意
运行 npm install 是 Yeoman Generator for Office 外接程序在创建项目时执行的最后一项作。 如果报告了错误,则无需重新运行生成器,因为项目已完全创建。 只需在命令行中重新运行 npm install 即可。