37

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

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

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

4

4 回答 4

29

让它们保持最新是很好的。

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

npm-check-updatesnpm-check

npm install -g npm-check-updates

检查过时的全局包:

ncu -g        

或者

正如@pldg 通过 npx 推荐的那样

npx npm-check-updates -g

或者

正如@wheredidthatnamecomefrom 推荐的那样

npx npm-global-audit

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

于 2020-04-23T08:54:04.127 回答
9

我找到了您问题的答案:

  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它,它会在最后打印出来。

于 2018-12-04T19:09:06.770 回答
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        
于 2021-03-23T21:43:46.867 回答
0

好吧,还有另一种有趣的方法可以在不使用某些第三方包的情况下审核全局包。毕竟,我们不想在如此敏感的数据上使用它们来违反安全原则;)。

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

  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. package-lock.json使用这个 cli 命令在那里创建一个文件:
npm i --package-lock-only
  1. 运行审计
npm audit

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

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

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

于 2022-02-07T21:38:43.883 回答