需要纱线的固定分辨率特征,但也想用npm audit
进行审核?有没有替代npm audit
的纱线?或者,或者,固定依赖项的依赖项的解析是否适用于npm
?
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
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
是的,您可以使用yarn audit
来审核漏洞,但不能像在npm audit fix
中那样使用yarn audit fix
来修复漏洞。
要修复文件中yarn.lock
漏洞,您必须使用yarn add package_name
将软件包(带有漏洞)重新安装到较新版本
您可以在此处阅读问题=> https://github.com/yarnpkg/yarn/issues/7075
我认为它还没有准备好纱线。您可以参考以下问题。 https://github.com/yarnpkg/yarn/issues/5808
我在package.json文件中创建了一个脚本命令来修复它。它创建yarn.lock的副本作为package-lock.json,删除问题,然后重新创建yarn.lock。
"resolve:security": "npm i --package-lock-only && npm audit fix && rm yarn.lock && yarn import && rm package-lock.json",
我希望它对:)有所帮助
1st
始终使用源代码管理并首先签入package.json
以及yarn.lock
和/或package-lock.json
,然后从所有提交的文件开始,以便在需要时轻松回滚。
一个不向项目添加依赖项(也不安装第三方库)的解决方案怎么样?
yarn outdated # view
yarn audit # view
yarn install --audit # install
更喜欢交互式方式轻松有选择地升级?
yarn upgrade-interactive
这可能会满足您的所有要求。
奇怪的是,您可能会发现在该命令后面使用yarn audit
,您仍然有一些命令yarn upgrade-interactive
中未提及的漏洞。在这种情况下,我首先要考虑这一点:
yarn upgrade-interactive --latest
在哪里可以找到
还是不够好? ``` 纱线升级--最新 ```我已经看到了许多其他潜在的解决方案,以前我只是按照一些用户的建议暂时从yarn
切换到npm
,然后切换回yarn
。这对我来说也很好用。(虽然烦人且不优雅)
有些软件包不需要安装即可运行。 我还没有尝试过这个,它可能也很好:
npm_config_yes=true npx yarn-audit-fix
裁判
这里的关键是您使用npx
来避免作为依赖项安装。
还有更多的解决方案是可能的。npm
和yarn
都是包管理器,依赖管理是一件非常困难的事情,自动修复这些依赖关系将始终是一个难以解决的问题。因此,如果您有时间,我建议您对他们如何实际解决这些问题进行一些研究。你可能会发现自己不喜欢他们做事的方式。
最终,只要你能回滚,你就可以尝试很多这些,自己看看。某些包严重性可能不需要修复,有时库还没有可用的解决方案,那么您需要考虑在代码库中删除它们的用法。理论上,少即是多,对使用库的库的依赖性越来越少,使用库的库......成为攻击者攻击的更小的表面。此外,不建议使用来自不受信任来源的库,npm
、yarn
等无法立即知道一切,因此也要考虑这一点。
执行yarn audit
并找到存在漏洞的软件包,
如果它们在您的 package.json 文件中
- 从那里修复他们的版本
还
- 它们是包的依赖项,因此请将其添加到package.json文件中
"resolutions": {
"**/package-name": "known-good-version",
"**/**/package-name": "known-good-version"
}
您可以使用其他答案中提到的yarn audit
,但是,有一种不同的方法可以解决它们......
您将需要添加resolution
指令来指定解析 vunerability 的库版本和依赖项的路径(因为库可以是另一个依赖项的依赖项,例如:
考虑下面一些包.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"
}
}
更多详细信息可以直接在文档中查看:文档
Yarn 也有yarn audit
机制,但它没有yarn audit fix
机制。因此,在大多数情况下,您必须手动解决这些问题。这就是它的工作原理。例如,我们将使用最小化包来演示它:
- 在
package.json
文件中添加resolutions
密钥:
- 直接添加依赖(比如
minimist
)作为键值。此分辨率将完全覆盖项目中的minimist
。
{
"resolutions": {
"minimist": "^1.2.5"
}
}
- 在大多数情况下,项目中可以有多个依赖项使用相同的辅助依赖项,但是,它们可能使用这些依赖项的不同版本。值得庆幸的是,yarn/npm 允许我们有选择性的依赖解析。
定义resolutions
的格式如下:
/* package.json */
{
"resolutions": {
"<package>/**/<dependency>": "<version>"
}
}
例如,假设我们有一个依赖A
和B
,它们都依赖于另一个依赖C
。
然后我们的分辨率字段将如下所示:
/* package.json */
{
"resolutions": {
"A/**/C": "2.0.3", // A works fine with the latest version of C
"B/**/C": "1.9.0" // latest stable version for C for dependency B
}
}
让我们通过package-merge-lodash-4
包的示例进一步了解它是如何工作的。如果审计说lodash@3.9.3
有漏洞并建议我们升级lodash@3.9.3 -> 4.17.12
.
我们只能为相关包编写 json 文件的分辨率,如下所示:
{
"resolutions": {
"package-merge-lodash-4/**/lodash": "4.17.12"
}
}
- 如何在 npm 中使用选择性依赖解析?
添加到文件后
resolutions
preinstall
脚本中添加npm-force-resolutions
package.json
以便在每次运行npm install
之前修补package-lock
文件:
"scripts": {
"preinstall": "npx npm-force-resolutions"
}
要确认安装了正确的版本,请使用以下命令
npm ls <vulnerable dependency>
npm ls lodash
资源:
- 选择性依赖项解析
- 纱线 - 如何解决安全问题
- 如何修复 NPM/Yarn 依赖项中的安全漏洞
- 纱线审核修复:解决方法
- package.json 中的 tilde(~) 和 caret(^) 有什么区别?
- Semver 解释 - 为什么我的 package.json 中有一个插入符号 (^)?
Yarn 目前不支持修复,
解决方法
- 使用 npm 创建一个 package-lock.json 文件。
- 修复软件包
- 删除
package-lock.json
。
.
npm i --package-lock-only
npm audit fix
rm package-lock.json
并启动
yarn start
尝试使用,
yarn upgrade-interactive --latest
将安装所有最新的依赖项。
如果使用yarn3,你可以做到:
yarn npm audit