如官方npm 文档中所述,您可以在本地安装的包上手动运行npm audit,这些包必须同时具有package.json和package-lock.json文件。
全局安装的包没有package-lock.json,如果你运行审计它会抛出一个错误:npm ERR! code EAUDITNOLOCK
如何npm audit在所有全局安装的软件包上运行?
让它们保持最新是很好的。
这并不是真正的 auditing,但使用尽可能少的全局包,这应该足够了。
npm install -g npm-check-updates
检查过时的全局包:
ncu -g
或者
正如@pldg 通过 npx 推荐的那样
npx npm-check-updates -g
或者
正如@wheredidthatnamecomefrom 推荐的那样
npx npm-global-audit
这是一个使用纱线运行的脚本。它会临时复制您当前的全局包。在他们的github上查看更多信息。
我找到了您问题的答案:
npm init只需按住进入问题,或者npm init -y它会填充默认值。这将为您提供 npm audit 需要的 package.json 并自动将 node_modules 中的内容添加到其中。npm i --package-lock-only如果需要,将安装并添加 package-lock.json(npm 审计需要)。npm audit:)要找到您的全局 npm 文件夹,只需运行npm它,它会在最后打印出来。
# 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
好吧,还有另一种有趣的方法可以在不使用某些第三方包的情况下审核全局包。毕竟,我们不想在如此敏感的数据上使用它们来违反安全原则;)。
您可能需要使用管理权限运行终端(bash或类似 Unix 系统或 Windows 上的类似系统)才能获得正确的结果。cmd
npm i
你应该得到这样的东西:
C:\Program Files\nodejs -> .\
├── gulp-cli@2.3.0
├── nodemon@2.0.15
├── npm@8.4.1
└── ts-node@10.5.0
使用您的终端转到该路径。请记住,此路径可能通过链接(或符号链接)指向另一个文件夹。
在该文件夹中创建一个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 本身也包括在内。
package-lock.json使用这个 cli 命令在那里创建一个文件:npm i --package-lock-only
npm audit
它至少在我的 Windows 8.1 系统上对我有用,运行 node v.16.13.2,npm v.8.4.1。
有趣的是,我的报告中有一个针对 npm 本身的中等严重性漏洞。
如果您能以我建议的解决问题的方式分享您的经验,我将不胜感激。