flutter moved all dependencies of pubspec.lock to pubspec.yaml 报错
flutter moved all dependencies of pubspec.lock to pubspec.yaml to report an error
为了控制所有间接依赖的版本,我把pubspec.lock
的所有依赖都移到了pubspec.yaml
。我比较了pubspec.yaml
和pubspec.lock
的区别,最后pubspec.yaml
是这样的:
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
然后报错:
pub get failed (1; Because xxx depends on sky_engine >=0.0.2 which
requires SDK version <2.0.0, version solving failed.)
错误很明显,sky_engine
需要SDK版本<2.0.0
。但是 sky_engine 是 flutter sdk 的依赖项,在我移动到 pubspec.yaml
.
之前一切正常
我的问题:
- 为什么
sky_engine
在 pubspec.lock
中工作没有版本问题?如果不降低flutter sdk的版本,如何解决目前的问题?
- 如果我想控制所有间接依赖的版本,有没有更好的方法?
Why does sky_engine work in pubspec.lock without version problems?
我不确定,但我的猜测是 Flutter 中的引用是从 Flutter SDK 中提取的,但是您将其添加到 pubspec 的方式是试图从 pub 中提取 this very old package。
If I don't lower the flutter sdk version, how can I solve the current problem?
您可以从列表中删除 sky_engine
。它将通过您的 Flutter SDK 进行隐式版本控制。然而:
If I want to control all indirect dependent versions, is there a better way?
是的,您最好提交 pubspec.lock
文件(并且只在 pubspec.yaml
中列出您的特定依赖项)。这是针对您的应用程序的建议做法:
https://dart.dev/guides/libraries/private-files#pubspeclock
For application packages, we recommend that you commit the pubspec.lock
file. Saving pubspec.lock
ensures that everyone working on the app uses the exact same versions.
但是,如果您正在创建一个 package/reusable 库,这样做可能会对使用该包的项目产生不必要的版本限制,因此这可能不是一个好主意。你没有说为什么你想这样做。
我重新查看了pubspec.lock
文件,发现是SDK依赖方式,我写错了。
这是 pubspec.lock
:
# 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"
发现sky_engine
、flutter
、flutter_test
的sources
都是sdk
,然后参考flutter的使用和 flutter_test
在 pubspec.yaml
中,所以我得到了以下写作,它有效。
sky_engine:
sdk: flutter
加上@Danny Tuppeny
的建议,我现在有两种控制间接依赖的方法:
- 将所有间接依赖项添加到
pubspec.yaml
- 应用
pubspec.lock
提交到远程仓库
为了控制所有间接依赖的版本,我把pubspec.lock
的所有依赖都移到了pubspec.yaml
。我比较了pubspec.yaml
和pubspec.lock
的区别,最后pubspec.yaml
是这样的:
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
然后报错:
pub get failed (1; Because xxx depends on sky_engine >=0.0.2 which requires SDK version <2.0.0, version solving failed.)
错误很明显,sky_engine
需要SDK版本<2.0.0
。但是 sky_engine 是 flutter sdk 的依赖项,在我移动到 pubspec.yaml
.
我的问题:
- 为什么
sky_engine
在pubspec.lock
中工作没有版本问题?如果不降低flutter sdk的版本,如何解决目前的问题? - 如果我想控制所有间接依赖的版本,有没有更好的方法?
Why does sky_engine work in pubspec.lock without version problems?
我不确定,但我的猜测是 Flutter 中的引用是从 Flutter SDK 中提取的,但是您将其添加到 pubspec 的方式是试图从 pub 中提取 this very old package。
If I don't lower the flutter sdk version, how can I solve the current problem?
您可以从列表中删除 sky_engine
。它将通过您的 Flutter SDK 进行隐式版本控制。然而:
If I want to control all indirect dependent versions, is there a better way?
是的,您最好提交 pubspec.lock
文件(并且只在 pubspec.yaml
中列出您的特定依赖项)。这是针对您的应用程序的建议做法:
https://dart.dev/guides/libraries/private-files#pubspeclock
For application packages, we recommend that you commit the
pubspec.lock
file. Savingpubspec.lock
ensures that everyone working on the app uses the exact same versions.
但是,如果您正在创建一个 package/reusable 库,这样做可能会对使用该包的项目产生不必要的版本限制,因此这可能不是一个好主意。你没有说为什么你想这样做。
我重新查看了pubspec.lock
文件,发现是SDK依赖方式,我写错了。
这是 pubspec.lock
:
# 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"
发现sky_engine
、flutter
、flutter_test
的sources
都是sdk
,然后参考flutter的使用和 flutter_test
在 pubspec.yaml
中,所以我得到了以下写作,它有效。
sky_engine:
sdk: flutter
加上@Danny Tuppeny
的建议,我现在有两种控制间接依赖的方法:
- 将所有间接依赖项添加到
pubspec.yaml
- 应用
pubspec.lock
提交到远程仓库