【问题标题】:How to npm audit global packages如何 npm 审计全局包
【发布时间】:2022-02-08 05:38:43
【问题描述】:

正如官方npm documentation 中所说,您可以在本地安装的包上手动运行npm audit,该包必须同时具有 package.jsonpackage-lock.json文件。

全局安装的包没有package-lock.json,如果你运行审计它会抛出一个错误:npm ERR! code EAUDITNOLOCK

如何在所有全局安装的包上运行npm audit

【问题讨论】:

标签: npm


【解决方案1】:

最好让它们保持最新状态。

这并不是真正的审计,但是使用尽可能少的全局包,这应该足够了。

npm-check-updatesnpm-check

npm install -g npm-check-updates

检查过时的全局包:

ncu -g        

@pldg 通过 npx 推荐

npx npm-check-updates -g

由@wheredidthatnamecomefrom 推荐

npx npm-global-audit

这是一个使用 yarn 运行的脚本。它会临时复制您当前的全局包。在他们的github 上查看更多信息。

【讨论】:

  • 谢谢它的工作。如果你不想安装 npm-check-updates 你可以使用npx:npx npm-check-updates -g
  • npm-global-audit 将进行真正的审核。
【解决方案2】:

我找到了您问题的答案:

  1. 转到您的全局 npm 文件夹
  2. npm init 只需按回车键进入问题,或npm init -y 以填充默认值。这将为您提供 npm audit 需要的 package.json,并自动将 node_modules 中的内容添加到其中。
  3. npm i --package-lock-only 将在需要时安装并添加 package-lock.json(npm 审计需要)。
  4. 运行npm audit :)

要查找您的全局 npm 文件夹,只需运行 npm,它会在最后打印出来。

【讨论】:

  • 感谢您的回答,无论如何我认为这不是一个好的解决方案。相反,我可以列出所有全局安装的包,将它们安装在本地存储库中,然后 npm audit。我的问题是:如何直接对全局安装的软件包进行审核?也许是不可能的......
  • 这使您可以直接在全局安装的软件包上运行审核。但是,我想当您在全球范围内安装新软件包时,packages.json 不会得到更新。您可以随时删除 package.json + package-lock.json 并在您想再次审核时重复。很容易制作成脚本。
  • 唯一让我担心的是搞乱 npm 文件夹。也许最好创建一个本地存储库并制作一个脚本以将全局包镜像到自动运行审核的存储库
  • 这也是一个有趣的想法!您必须单独执行更新,即使它们可以由 npm audit 完成。
  • @philn5d 您说“制作脚本很容易”,但作为 Web 开发人员,我们中的一些人只制作网站,从不制作“脚本”。你知道任何好的资源或指南来开始我们的第一个脚本吗?
【解决方案3】:
# Without installing the package locally, using npx
npx npm-check-updates -g

# otherwise, install and update on occasion 
npm install -g npm-check-updates

# Then check outdated global packages:
ncu -g        

【讨论】:

【解决方案4】:

嗯,还有另一种有趣的方式来审核全局包,而无需使用某些第三方包。毕竟,我们不想通过在如此敏感的数据上使用它们来违反安全原则;)。

您可能需要以管理权限运行终端(bash 或类似 Unix 的系统或 cmd 在 Windows 上)以获得正确的结果。

  1. 使用此命令找出全局安装包的路径和列表:
npm i

你应该得到这样的东西:

C:\Program Files\nodejs -> .\
├── gulp-cli@2.3.0
├── nodemon@2.0.15
├── npm@8.4.1
└── ts-node@10.5.0
  1. 使用您的终端转到该路径。请记住,此路径可能通过链接(或符号链接)指向另一个文件夹。

  2. 在该文件夹中创建一个 package.json 文件,其中包含反映全局包列表和您在第 1 步中获得的确切版本的内容,如下所示:

{
  "name": "-",
  "version": "0.0.1",
  "dependencies": {
    "gulp-cli": "2.3.0",
    "nodemon": "2.0.15",
    "npm": "8.4.1",
    "ts-node": "10.5.0"
  }
}

注意 npm 本身也包含在内。

  1. 使用这个 cli 命令在那里创建一个package-lock.json 文件:
npm i --package-lock-only
  1. 运行审核
npm audit

它至少在我的 Windows 8.1 系统上对我有用,运行 node v.16.13.2,npm v.8.4.1。

有趣的是,我的报告中有一个针对 npm 本身的中等严重性漏洞。

如果您能按照我建议的解决问题的方式分享您的经验,我将不胜感激。

【讨论】:

  • 在 Linux 上的 npm 版本 8.9.0 对我来说不起作用。尝试读取当前目录 package.json 意味着它不是全局搜索。
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 2017-12-11
  • 2022-01-25
  • 2021-05-19
  • 1970-01-01
  • 2019-04-13
  • 2020-05-27
  • 2021-04-13
相关资源
最近更新 更多