首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振将pubspec.lock的所有依赖项移动到pubspec.yaml以报告错误。

颤振将pubspec.lock的所有依赖项移动到pubspec.yaml以报告错误。
EN

Stack Overflow用户
提问于 2021-06-23 06:41:14
回答 2查看 1K关注 0票数 0

为了控制所有间接依赖项的版本,我将pubspec.lock的所有依赖项移到pubspec.yaml中。我比较了pubspec.yamlpubspec.lock之间的差异,最后pubspec.yaml如下所示:

代码语言:javascript
复制
name: xxxx
description: A new flutter plugin project.
version: 0.0.1
homepage:

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=1.20.0"

dependencies:
  flutter:
    sdk: flutter

  # flutter packages=========
  async: 2.6.1
  boolean_selector: 2.1.0
  characters: 1.1.0
  charcode: 1.2.0
  clock: 1.1.0
  collection: 1.15.0
  fake_async: 1.2.0
  ffi: 1.1.2
  matcher: 0.12.10
  meta: 1.3.0
  path: 1.8.0
  sky_engine: 0.0.99
  source_span: 1.8.1
  stack_trace: 1.10.0
  stream_channel: 2.1.0
  string_scanner: 1.1.0
  term_glyph: 1.2.0
  test_api: 0.3.0
  typed_data: 1.3.0
  vector_math: 2.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter

然后我得到一个错误:

发布失败(1;因为xxx依赖于要求SDK版本<2.0.0的sky_engine >=0.0.2,版本解决失败)

错误很明显,sky_engine需要SDK版本的<2.0.0。但是sky_engine是flutter的一个依赖项,在我转到pubspec.yaml之前,一切都正常工作。

我的问题:

  1. 为什么sky_engine在没有版本问题的pubspec.lock中工作?如果我不降低颤振sdk版本,我如何解决当前的问题?
  2. 如果我想控制所有间接依赖的版本,还有更好的方法吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-23 06:47:02

为什么sky_engine在没有版本问题的pubspec.lock中工作?

我不确定,但我的猜测是,Flutter中的引用是从颤振SDK中提取的,但是将其添加到您的公共规范中的方式是试图从pub中提取这个很旧的包裹

如果我不降低颤振sdk版本,我如何解决当前的问题?

您可以将sky_engine从列表中删除。它将通过您的颤振SDK进行隐式版本化。然而:

如果我想控制所有间接依赖的版本,还有更好的方法吗?

是的,您最好提交pubspec.lock文件(并且只在pubspec.yaml中列出特定的依赖项)。这是为您的应用程序建议的实践:

https://dart.dev/guides/libraries/private-files#pubspeclock

对于应用程序包,我们建议您提交pubspec.lock文件。保存pubspec.lock确保每个在应用程序上工作的人都使用完全相同的版本。

但是,如果您正在创建包/可重用库,那么这样做可能会为使用包的项目创建不必要的版本约束,因此这可能不是一个好主意。但你没说你为什么要这么做。

票数 2
EN

Stack Overflow用户

发布于 2021-06-23 07:16:15

我重新检查了pubspec.lock文件,发现SDK取决于方式,我写错了。我是pubspec.lock

代码语言:javascript
复制
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
  async:
    dependency: "direct main"
    description:
      name: async
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.6.1"
  boolean_selector:
    dependency: "direct main"
    description:
      name: boolean_selector
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0"
  characters:
    dependency: "direct main"
    description:
      name: characters
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0"
  charcode:
    dependency: "direct main"
    description:
      name: charcode
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0"
  clock:
    dependency: "direct main"
    description:
      name: clock
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0"
  collection:
    dependency: "direct main"
    description:
      name: collection
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.15.0"
  fake_async:
    dependency: "direct main"
    description:
      name: fake_async
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0"
  ffi:
    dependency: "direct main"
    description:
      name: ffi
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.2"
  flutter:
    dependency: "direct main"
    description: flutter
    source: sdk
    version: "0.0.0"
  flutter_test:
    dependency: "direct dev"
    description: flutter
    source: sdk
    version: "0.0.0"
  matcher:
    dependency: "direct main"
    description:
      name: matcher
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.12.10"
  meta:
    dependency: "direct main"
    description:
      name: meta
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.3.0"
  path:
    dependency: "direct main"
    description:
      name: path
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.8.0"
  sky_engine:
    dependency: "direct main"
    description: flutter
    source: sdk
    version: "0.0.99"
  source_span:
    dependency: "direct main"
    description:
      name: source_span
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.8.1"
  stack_trace:
    dependency: "direct main"
    description:
      name: stack_trace
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.10.0"
  stream_channel:
    dependency: "direct main"
    description:
      name: stream_channel
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0"
  string_scanner:
    dependency: "direct main"
    description:
      name: string_scanner
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0"
  term_glyph:
    dependency: "direct main"
    description:
      name: term_glyph
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0"
  test_api:
    dependency: "direct main"
    description:
      name: test_api
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.3.0"
  typed_data:
    dependency: "direct main"
    description:
      name: typed_data
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.3.0"
  vector_math:
    dependency: "direct main"
    description:
      name: vector_math
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0"
sdks:
  dart: ">=2.12.0 <3.0.0"
  flutter: ">=1.20.0"

我发现sources of sky_engineflutterflutter_test都是sdk,然后我提到了pubspec.yaml中使用的flutter和flutter_test,所以我编写了下面的文章,它很有效。

代码语言:javascript
复制
sky_engine:
    sdk: flutter

再加上@Danny Tuppeny的建议,我现在有两种控制间接依赖的方法:

  1. 将所有间接依赖项添加到pubspec.yaml
  2. pubspec.lock提交到远程存储库的应用程序
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68094765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档