Yarn: 纱线升级无法正确更新dev.depends的package.json

创建于 2016-10-25  ·  83评论  ·  资料来源: yarnpkg/yarn

您要请求_feature_还是报告_bug_?

_bug_

目前的行为是什么?

运行yarn upgrade升级开发的依赖,甚至与--dev标志,将添加依赖到的升级版dependencies哈希package.json ,而不是devDependencies

其他依赖项类型(例如对等)也可能是一个问题,但我尚未测试。

如果当前行为是错误,请提供重现步骤。

$ mkdir foo && cd foo
$ yarn init
<snip>
$ yarn add lodash<strong i="19">@3</strong> --dev
<snip>

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  }

$ yarn outdated
yarn outdated v0.16.1
Package Current Wanted Latest
lodash  3.10.1  3.10.1 4.16.4

$ yarn upgrade lodash --dev
<snip>
success Saved 1 new dependency
└─ [email protected]

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  },
--
--
  "dependencies": {
    "lodash": "^4.16.4"
  }

预期的行为是什么?

yarn upgrade应该更新devDependencies哈希中条目的版本字符串。

如果可以使用依赖项的当前位置在没有--dev情况下完成此操作,那就太好了(升级dev dep会修改devDependencies ,升级普通dep会修改dependencies ) 。

请提及您的node.js,yarn和操作系统版本。

$ node --version
v6.9.1
$ yarn --version
0.16.1
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12
BuildVersion:   16A323
cat-bug

最有用的评论

与纱线1.3.2相同

所有83条评论

我可以确认我在完全相同版本的Yarn上看到了这种情况。 它没有更新现有的开发依赖项,而是在“依赖项”中添加了一个新条目,并将现有的开发依赖项保留在那里。

此处也确认了错误。

同样在这里。 standard不断插入到dependencies即使它位于devDependencies

我已经尝试了yarn upgrade standardyarn upgrade standard -D 。 一样。

程序虽然可爱! 感谢您的构建!

这是相同的问题,早于-#1262

同样在这里。

同样在这里。 通过yarn update更新的每个模块都将添加到dependencies
--dev或其他选项不记录为yarn update ,显然忽略。

IMO更新应该接受与install相同的选择-甚至更好地更新package.json中找到的类别中的依赖项

node --version
v6.9.0
yarn --version
0.16.1

1620解决了这个问题,所以我将结束讨论并将讨论移到那里。

仍未解决,我正在使用通过Homebrew安装的最新纱线。

@kube如果仍然存在问题,请您添加更多详细信息吗? OS,Node,Yarn的版本? 可以用来复制的package.json吗?

λ yarn --version
0.16.1

我在macOS 10.12.1上,用Homebrew安装了Yarn。

这是我尝试过的package.json

ts-loaderwebpack-merge已过时,使用yarn升级它们将它们添加到依赖项中,而使devDependencies过时。

@kube请尝试今天刚刚发布的0.17.0 ,此修复程序已包含在该版本中,但未包含在0.16.1

可以,但是自制软件仍然有0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

尝试使用NPM进行安装,并且具有最新版本,但是使用NPM安装Yarn似乎很奇怪。

好的,使用0.17.0时一切正常,但是也许您应该更新Brew版本。
哪种软件包管理器是首选的安装方式?

Brew是OSX的首选安装方法。 它仍然是在Homebrew上进行更新的手动过程,因此有人必须像在这里一样要求对其进行更新: https :

当我运行yarn upgrade ,它不会更新package.json任何版本。 NPM令人讨厌,它会自动更新数字。

我正在使用自制的纱线0.17.2。

@milesj ,这可能应该是一个单独的问题,请提供复制步骤以及我们可以用来复制的package.json

我将创建一个新的问题。

在Debian Stable上,纱线0.17.4似乎至少已得到解决。 它已将lodash@3正确升级到lodash@4 ,因此可能只需要更新到最新版本即可。

我正在尝试将grunt-sass从1.1.0升级到2.0.0 (在我的__dev-dependencies__中)
我执行yarn upgrade [email protected]但在我的__dependencies__中添加grunt-sass而不升级__dev-dependencies__中的那个

我也尝试了yarn upgrade [email protected] --dev但问题仍然存在

使用yarn v0.18.1,我仍然无法强制升级子依赖项。 yarn upgrade仅向package.json添加一个新条目,而不更新子依赖关系。

问题仍然存在于0.19.1中,yarn升级没有更新package.json。

@小猫,这不是#1620固定的

我也可以在0.19.1中确认此问题。

每个人-使用yarn add <package-name>都将立即更新所需的软件包。

yarn upgrade也不适合我,v0.19.1

yarn升级当前仅更新yarn.lock,而不更新package.json。

可以确认v0.20.3中的问题

我有同样的问题,当使用yarn upgrade时,它会升级所有软件包,但不会反映在package.json文件中。 v0.20.3 ..真的很烦。 我还注意到,在使用“ yarn install”时,它会在package.json中安装所有列表包的最新版本,并且不遵循其中提到的版本,因此就像yarn将它们升级为最新版本一样,也没有反映出这一点。在package.json中,但在yarn.lock中显示已安装的当前版本

@kittens v0.20.3 @ Windows,仍然不会更新package.json-仅更新yarn.lock文件。 您应该重新打开它。

由于这个错误,我放弃了纱线并切换回npm。 无论我如何尝试升级软件包,yarn都会将最新的软件包获取到缓存中,并将旧版本保留在我的package.json和node_modules文件夹中。 重点是什么?..

是! 我可以确认Yarn v0.21.3最终会更新package.json,至少是yarn upgrade-interactive命令。

@alexdevero我刚刚在我的3个项目上尝试了yarn upgrade :它没有更新任何package.json...。

但我确认yarn upgrade-interactive适用于第一个更新项目
下一次在需要相同升级的其他项目上使用yarn upgrade-interactive将会失败,即“成功所有依赖项都是最新的”。

我在我的3个项目中的每一个上都将react-scripts从0.9.x更新到0.9.3进行了测试。 yarn upgrade-interactive在第一个项目上工作,但随后忽略了其他2个项目上的更新。

截至今天,在版本0.21.3上, yarn upgrade仍然表现不正确。

我改用yarn add package<strong i="7">@version</strong> --dev ,它会根据需要升级程序包并正确更新package.json。

Fwiw,我一直在使用upgrade-interactive ,由于某种原因,它似乎能带来更好的运气。

🍒

最好知道这种情况下纱线的预期性能。 任何纱线开发人员都可以说纱线是否应该更新package.json?

我只是在devDependencies做了一个yarn upgrade babel-cli ,它被添加为生产依赖项(添加到dependencies )...仍然完全坏掉了。 哦,我用yarn v 0.22.0 btw!

编辑:原来,我将NODE_ENV设置为“生产”(由于我的应用程序是节点应用程序),这使诸如“纱安装”(将像yarn install --production并完全跳过devDependencies例如

也许yarn upgrade也受节点环境变量的影响。

刚刚意识到这一点:
image

我不是辩护律师或其他任何人,我认为应该重新开放……而是圣球。 720期刊物足以淹没一艘挤满纱线开发商的游轮。

Windows 10 Pro和Node 6.10.0的Yarn v0.21.3中仍然存在+1问题。

这不是固定的。 我在macOS Sierra 10.12.4上获得它。 我有一些devDependencies是私有git repos和一个标准的dependency"jquery": "^3.1.1" )。 jQuery的最新版本是3.2.1,并且yarn upgrade看到了( ├─ [email protected] ),但没有更新package.json

yarn --version
0.21.3
node --version
v7.7.4

重新打开。

Windows-v0.21.3在指定包后会失败,并带有yarn upgrade ...,它将更新package.json和锁文件。

Windows-v0.22-仍然不会更新package.json,但会更新锁定文件。
可以进行各种工作,但是并不能确定所有应该更新的软件包,从而破坏了各种对等项的依赖关系。

值得庆幸的是,我只在一个项目上使用过它,并且能够恢复混乱。 我喜欢Yarn背后的想法,但是除非对此进行分类,否则我不会为之困扰。

Windows,Yarn v0.22-使用yarn upgrade时不会更新package.json ,如@LaughingBubba所述。 node_modules文件夹已更新,但package.json未更新,这会在软件包版本中造成混乱。

@小猫似乎没有被修复。

我刚刚在0.23.2中再次看到了这一点。

在我的情况下,如果列表中至少有一个升级的依赖项不是devDep,那么它将所有升级都放入package.json中的依赖项中。

更新:通过更新单个devDep也可以看到它。 它被复制到部门而不升级。

这绝对不是固定的。 现在在此上浪费了一个小时。 纱线不是应该比npm好吗?

@ fab1an ,目前使用yarn add package-name<strong i="6">@latest</strong> [--dev]更新软件包。 它的行为与预期的upgrade ,可以正确更新package.json。

@diegovilar感谢您的小费,但是对于25个以上的开发依赖者来说太麻烦了。 我只是回到使用npm-check -u进行升级。

在Windows x64中仍被破坏,纱线0.23.2

对于在这里评论的每个人,我建议同时使用yarn upgrade-interactive 。 在这里一直表现不错。

仍然坏了,如果您使用yarn upgrade-iteractive并且不知道包依赖于哪个版本的tslint,codelyzer,打字稿等,例如Angular或Angular CLI,则可能会导致大量错误困扰您即使将其全部退回。 此问题是否已重新发布?

@milesj没有我在这里,但我一直只用upgrade-interactive来解决同样的问题。

由于它已经关闭了几个月,因此不确定是否要花费很多时间,因此创建了一个新问题-#3266

@ fab1an不幸的是。 我没有更新package.json的问题:/

@ fab1an @milesj我也有upgrade-interactive没有更新我们项目之一的package.json。 好像是如果您进行升级,而package.json没有正确的编号,那么所有交互式升级都不会更新package.json ...或类似的东西...两种方式都可以同意您的意见,但有时无法正常工作。

Windows 10进行版本yarn upgrade时,yarn v0.23.4仍然不会更新package.json

编辑:也许这是故意的?
例如: "semantic-ui-react": "^0.68.2" -已经有一个新版本(0.68.3)并安装了该版本,并将yarn.lock更改为0.68.3,但是由于该版本中的^ (> = 0.68.2 <0.69.0),无需将package.json更新为^0.68.3吗?

@iamfreee我正在运行Yarn v0.24.5并运行yarn upgrade不会更新package.json,仅更新yarn.lock。 这不可能(或至少不应该)是有意的,因为首先,package.json中的版本控制是先设置软件包的实际版本,然后指定升级约束,即^~ 。 其次,在单个软件包上运行yarn upgrade更改package.json,那么为什么升级所有软件包时的行为会有所不同? 为什么在运行yarn upgradeyarn upgrade-interactive之间的行为上存在差异,这没有任何意义?

这个问题已经解决了一段时间,因此坦率地说它没有任何吸引力。 我们应该打开一个新期刊。 即使这种行为是故意的,我仍然不同意。 yarn upgrade甚至都不应升级到@latest标记,因为如果package.json中列出了不同的版本约束,该怎么办? 参见此处: https: //docs.npmjs.com/cli/update#caret -dependencies

@leosco在我的情况下, npm update也没有更新package.json ,而且yarn upgrade [package]也没有成功。 这就是为什么我认为该问题与版本约束^或预期的行为有关。

@iamfreee不,您必须执行npm update --save ,这应该是Yarn的默认行为。

我发布了一个详细介绍所有问题的新问题,请参见https://github.com/yarnpkg/yarn/issues/3492,并可能在此处继续讨论。

我也想回应一下,我在yarn interactive-upgrade取得了成功,而yarn upgrade --latest却对我没有用。
在节点v7.10.0上使用yarn v0.24.6。

yarn upgrade --latest工作正常:+1:

~> yarn -v
1.0.0
~> yarn upgrade --help | grep "\-\-latest" | head -n 1

  --latest       list the latest version of packages, ignoring version ranges in package.json

yarn interactive-upgrade在v1中似乎出现了问题。

@milesj您可以尝试夜间构建吗? https://yarnpkg.com/zh-CN/docs/nightly此PR可能已对其进行了修复https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB我不确定,但我认为yarn interactive-upgrade现在的行为有所不同。 我只是在有许多次要升级的项目中运行了它,而package.json并没有被修改,只是yarn.lock 。 在1.0.2之前,我认为package.json会与升级版本保持同步,但是我对此可能是错的。。。最新的夜间版本并没有改变我的行为。

yarn upgrade --latest现在可以正常工作,但是我更愿意能够交互式地选择要升级的内容,然后相应地调整package.json

@lehni还有yarn interactive-upgrade --latest

@milesj :您的意思是yarn upgrade-interactive --latest吗?
docs: https :

嗯,脑子放屁。 谢谢。

与纱线1.3.2相同

与纱线1.5.1相同

再次在1.5.1中被破坏

被打破-

$ node --version
v9.0.0
$ yarn --version
1.5.1

同一问题节点v8.9.4
纱线1.5.1

一种解决方法:使用yarn add代替yarn upgrade

简而言之:

  • yarn upgrade :将软件包升级到pacakge.json指定的最新可能范围,但不要覆盖
  • yarn add :将软件包升级到最新可能的范围重写package.json
  • yarn update ,例如npm update :不存在

但是npm update的文档说:

[email protected]开始,npm更新将更改package.json以将新版本保存为所需的最低依赖关系。 要获取旧的行为,请使用npm update --no-save。

然而事实上...

 y > npm -v
5.7.0
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
}
 y > npm update lodash
npm WARN y No description
npm WARN y No repository field.
npm WARN y No license field.

+ [email protected]
added 1 package from 2 contributors in 1.004s
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
} 

不知道该使用哪个:( Yarn在2017年的某个时候添加了此行为,然后悄无声息地打破了。npm声称在它也不起作用时也拥有它。

@kittens请重新打开此问题。

@octref yarn upgrade所说,将依赖项升级到最新版本,但不会覆盖package.jsonyarn add <package>会将软件包更新为最新版本(如果已安装并覆盖package.jsonyarn upgrade是否有理由不覆盖package.json吗? 如果是这样,那么可以将其作为标志添加到yarn upgrade

[email protected]
[email protected]
os: MacOS

编辑

阅读https://github.com/yarnpkg/yarn/issues/5602#issuecomment -377528617

一种解决方法:使用yarn add代替yarn upgrade

奇迹般有效。 需要更新这两个文档页面以使用yarn add而不是yarn upgrade

我已经使用yarn upgrade-interactive --latest已有一段时间了,没有任何打......

我已经使用纱线升级交互-最新一段时间了,没有任何打......

似乎有点多余。为什么不只使用所有这些命令中最简单的命令yarn add呢? 超级简单。

@ guylepage3,因为我可以根据补丁程序/次要版本/主要版本的更改来查看具有不同颜色编码的哪些版本中的可用版本升级,选择我要升级的版本,然后立即执行多次升级。 没什么多余的吗?

@lehni,则网站上的文档应反映出这一点,随后的两个页面应声明使用yarn upgrade-interactive --latest方法。

@ guylepage3,此对话无处可去,也无济于事。 如果您想建议更新文档,最好专门为此创建新问题。

抱歉,如果您有这种感觉@alexdevero。 和是的已经做了,如果你看看上面.. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

这对我有帮助: https :

$ yarn upgrade-interactive && syncyarnlock

对于纱线工作区,这对我不起作用。 有人可以看看吗?

此页面是否有帮助?
0 / 5 - 0 等级