npm审计有纱线替代品吗?

Posted

技术标签:

【中文标题】npm审计有纱线替代品吗?【英文标题】:is there a yarn alternative for npm audit? 【发布时间】:2019-01-14 21:03:46 【问题描述】:

需要 yarn 的 pinned resolution 功能,还想用npm audit 审计?有没有替代npm audit 的纱线?或者,或者,在npm 中固定依赖项的依赖项解决方案是否有效?

【问题讨论】:

查看我的帖子alfilatov.com/posts/… 随着情况的变化,您可能希望更改接受的答案。 目前接受的答案是现在只使用纱线 【参考方案1】:

Yarn 没有npm audit fix

但这里是使用 npm 的方法 - 暂时。

    在不安装节点模块的情况下生成package-lock.json 文件
npm i --package-lock-only
    修复软件包并更新package-lock.json 文件
npm audit fix
    删除yarn.lock文件并将package-lock.json文件转换为yarn.lock
rm yarn.lock
yarn import
    删除package-lock.json文件
rm package-lock.json

例如:

yarn audit

38363 vulnerabilities found - Packages audited: 908342
Severity: 38352 Low | 11 Moderate

(我知道。react-scripts 疯了...)

npm audit
npm ERR! code EAUDITNOLOCK
npm ERR! audit Neither npm-shrinkwrap.json nor package-lock.json found: Cannot audit a project without a lockfile
npm ERR! audit Try creating one first with: npm i --package-lock-only
npm i --package-lock-only

...
added 266 packages, removed 354 packages, updated 1653 packages, moved 1 package and audited 913793 packages in 54.304s
found 495 low severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
npm audit fix

...
added 267 packages from 152 contributors, removed 355 packages and updated 1712 packages in 92.849s

50 packages are looking for funding
  run `npm fund` for details

fixed 211 of 495 vulnerabilities in 913793 scanned packages
  284 vulnerabilities required manual review and could not be updated
git status -s

?? package-lock.json
yarn import

yarn import v1.21.1
info found npm package-lock.json, converting to yarn.lock
...
success Saved lockfile.
✨  Done in 25.61s
rm package-lock.json

【讨论】:

太棒了,这正是我需要的,thnx 似乎yarn import 在使用引用其他本地包的monorepo 时不起作用。看起来它正在尝试从 npm 注册表中获取包。有什么技巧可以让它工作吗? 这个包npmjs.com/package/yarn-audit-fix是基于上面的答案把它变成一个单一的命令yarn-audit-fix,所以它应该为你简化上面的内容。【参考方案2】:

yarn audit / yarn install --audit 从 yarn@1.12.0 开始可用

https://github.com/yarnpkg/yarn/releases/tag/v1.12.0

很遗憾,还没有--fix 选项,但作为解决方法,您可以使用https://www.npmjs.com/package/yarn-audit-fix

【讨论】:

如果你看到Command "audit" not found 升级你的纱线安装。 npm install --global yarnnpm upgrade --global yarn 目前没有yarn audit 的“修复”选项,就像npm audit fix 一样。在此处关注问题:github.com/yarnpkg/yarn/issues/7075 @Dylanw npmjs.com/package/yarn-audit-fix【参考方案3】:

是的,您可以使用yarn audit 来审核漏洞,但您不能像在npm audit fix 中那样使用yarn audit fix 来修复漏洞。

要修复yarn.lock 文件中的漏洞,您必须使用yarn add package_name 将包(带有漏洞)重新安装到其较新版本

你可以在这里阅读问题 => https://github.com/yarnpkg/yarn/issues/7075

【讨论】:

该线程被锁定,应该创建一个新线程。他们没有认真对待这一点。【参考方案4】:

我认为它还没有准备好在纱线上。您可以参考以下问题。 https://github.com/yarnpkg/yarn/issues/5808

【讨论】:

同时接受的第 3 方替换怎么样? alfilatov.com/posts/…【参考方案5】:

执行yarn audit 并找到有漏洞的包,

如果它们在您的 package.json 文件中

从那里修复他们的版本

其他

它们是您的包的依赖项,因此请将其添加到 package.json 文件中
"resolutions": 
    "**/package-name": "known-good-version",
    "**/**/package-name": "known-good-version"
 

【讨论】:

【参考方案6】:

您可以使用其他答案中提到的yarn audit,但是,有一种不同的方法可以解决它们...

您将需要添加resolution指令来指定解决漏洞的库的版本和依赖的路径(因为该库可以是另一个依赖的依赖,例如:

考虑下面一些 package.json 的一部分


  "name": "project",
  "version": "1.0.0",
  "dependencies": 
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  ,
  "resolutions": 
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  

更多详情可直接查看文档:Doc

【讨论】:

【参考方案7】:

第一个

显然,始终使用源代码管理并首先签入您的package.json 以及yarn.lock 和/或package-lock.json,然后从所有提交的文件开始,这样您就可以在需要时轻松回滚。

不向您的项目添加依赖项(也不安装第三方库)的解决方案怎么样?

从这种内置的交互式方式开始,轻松有选择地升级:

yarn upgrade-interactive

这可能满足您的所有要求。

奇怪的是,您可能会发现在该命令之后使用yarn audit,您仍然有一些在命令yarn upgrade-interactive 中未提及的漏洞。在这种情况下,我首先会考虑:

yarn upgrade-interactive --latest

where that can be found

还是不够好?

yarn upgrade --latest

我已经看到了很多其他潜在的解决方案,之前我只是按照一些用户的建议从yarn暂时切换到npm,然后再切换回yarn。这对我来说也很好。 (虽然烦人且不优雅)

有些软件包不需要安装即可运行。 这个我没试过,应该也不错:

npm_config_yes=true npx yarn-audit-fix

ref

这里的关键是您使用npx 来避免安装为依赖项。

更多的解决方案是可能的。 npmyarn 都是包管理器,依赖管理是一件非常困难的事情,自动修复这些依赖总是一个难以解决的问题。因此,如果您有时间,我建议您对他们如何实际解决这些问题进行一些研究。你可能会发现自己不喜欢他们做事的方式。

最终,只要您可以回滚,您就可以尝试其中的很多方法并亲眼看看。有些包的严重性可能不需要修复,有时库还没有可用的解决方案,那么你需要考虑在你的代码库中删除它们的使用。从理论上讲,少即是多,对库的依赖更少,使用库,使用库......成为攻击者瞄准的一个小得多的表面。此外,不建议使用来自不受信任来源的库,npmyarn 等无法知道所有内容,也无法立即知道,所以也要考虑到这一点。

【讨论】:

【参考方案8】:

Yarn 目前不支持修复,

解决方法

使用 npm 创建一个 package-lock.json 文件。 修复软件包 删除package-lock.json

.

npm i --package-lock-only
npm audit fix
rm package-lock.json

开始

yarn start

【讨论】:

以上是关于npm审计有纱线替代品吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以用纱线代替 npm 吗?

在 SonarQube 中使用 npm 审计报告

“npm run build”不是在添加纱线之前运行吗?

使用yarn替代npm构建vue项目

Browserify有替代品吗? [关闭]

Dojo Toolkits 网格有啥替代品吗?