如何从flutter中删除或识别未使用的包以减少项目的大小?

kmb7vmvb  于 2023-04-22  发布在  Flutter
关注(0)|答案(9)|浏览(272)

我在flutter项目中使用了一些不再需要的软件包,即wilddog_authwilddog_sync,我可以从pubspec.yaml文件和我的dart文件中删除导入(也就是删除import 'package:wilddog_sync/wilddog_sync.dart'等),并在MainActivity.java和Xcode项目中删除导入,但我不能清除flutter安装的未使用的文件,cocoapod和gradle。现在flutter中有没有一个统一的命令,我可以一次删除所有未使用的软件包?
我很确定使用flutter clean只会删除build文件夹,而在从pubspec.yaml删除包后使用flutter packages get也不会删除cocoapodgradle中的包。
例如,在flutter cleanflutter packages get之后,我重新构建了项目:

Launching lib/main.dart on Android SDK built for x86 64 in debug mode...
Initializing gradle...
Resolving dependencies...
Running 'gradlew assembleDebug'...
Built build/app/outputs/apk/debug/app-debug.apk.
Installing build/app/outputs/apk/app.apk...
I/FlutterActivityDelegate(11331): onResume setting current activity to this
I/Choreographer(11331): Skipped 107 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation(11331): eglMakeCurrent: 0x79f21b4dbec0: ver 2 0 (tinfo 0x79f219b4f160)
I/OpenGLRenderer(11331): Davey! duration=1903ms; Flags=1, IntendedVsync=7544454683637, Vsync=7546238016899, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=7546253803603, AnimationStart=7546253996603, PerformTraversalsStart=7546254171603, DrawStart=7546279222603, SyncQueued=7546288526603, SyncStart=7546295569603, IssueDrawCommandsStart=7546296644603, SwapBuffers=7546334455603, FrameCompleted=7546365204603, DequeueBufferDuration=2892000, QueueBufferDuration=199000, 
Syncing files to device Android SDK built for x86 64...
D/        (11331): HostConnection::get() New Host Connection established 0x79f219ab81e0, tid 11383
D/EGL_emulation(11331): eglMakeCurrent: 0x79f21b5e26e0: ver 2 0 (tinfo 0x79f219aa66c0)
W/IInputConnectionWrapper(11331): getCursorCapsMode on inactive InputConnection

然而,所有的包文件仍然存在。
当然,我可以进入./ios/运行pods install来删除pod:

pod install
Analyzing dependencies
Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
Removing Wilddog
Removing WilddogCore
Removing WilddogSync
Downloading dependencies
Using Flutter (1.0.0)
Generating Pods project
Integrating client project
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

[!] Automatically assigning platform `ios` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
am46iovg

am46iovg1#

有一个直观的方法。安装this

dev_dependencies:
  dependency_validator: ^x.x.x

然后运行flutter pub run dependency_validator它将显示所有关于安装的包的详细信息。示例:=〉
这些包被固定在pubspec.yaml中:

  • dependency_validator:null --这是一个直接引脚。
  • permission_handler:null --这是一个直接引脚。
  • swipe_to:null --这是一个直接pin。

这些包在lib/中使用,但不是依赖项:

  • 连通性
  • meta
  • 路径

以下软件包包含可执行文件,假定将使用它们:

  • Flutter自然飞溅

这些包可能未使用,或者您可能正在使用这些包中的资产:

  • 库比蒂诺图标
  • Firebase分析
  • HTTP
  • 负载
  • 使用苹果登录
yhqotfr8

yhqotfr82#

删除flutter SDK目录中 .pub-cache 的托管文件夹

cd path/to/flutter_sdk_directory

rm -rf .pub-cache/hosted

删除项目根目录中的 .packages 文件

cd path/to/project_root_directory

 rm -rf .packages

获取项目的包

cd path/to/project_root_directory

flutter pub get

在Android Studio中打开项目
好了。

k3bvogb1

k3bvogb13#

有时候,可能有一些包在项目中没有使用,但您在开发阶段安装了。要找出这些包,首先转到每个dart文件并删除未使用的导入,然后转到pubspec.yaml,逐个注解包并保存项目,然后刷新应用程序(不热重新加载).如果我们在项目中使用的软件包,那么它会给你一个错误.在所有的软件包上重复这些步骤后,你将能够从你的pubspec中删除所有不需要的软件包.
现在,删除pubspec.lock文件,并再次运行pubget。您的项目现在将只拥有所需的包,这可能是可实现的最小大小。

jogvjijk

jogvjijk4#

有一个明显的方法很容易被忽视或认为是不可行的。
如果使用IntelliJ,只需执行“在文件中查找”(PC上的SHIFT+CTRL+F,Mac上的SHIFT+CMD+F),选择“目录”并选择项目的库文件夹。
然后浏览插件列表,依次搜索每个插件的名称。

  • 没有搜索结果
  • 它只在“generated_plugin_registrant.dart”中使用
  • 唯一的命中是灰色的import语句(被IntelliJ标记为未使用)

我花了不到一分钟的时间来消除8个未使用的插件使用这种方法。

dgjrabp2

dgjrabp25#

您可以使用这三个步骤来清除此问题
1.“扑干净”
1.删除pubspec.yaml中不需要的依赖项
1.删除pubspec.lock
重新加载项目并再次执行'pub get'并运行iOS/Android项目

yptwkmov

yptwkmov6#

此行为似乎是一个错误。您可以在此处跟踪它https://github.com/flutter/flutter/issues/65718

j2cgzkjk

j2cgzkjk7#

最好的办法是

flutter clean

如果这不起作用,只需创建一个新项目,将旧代码复制到新项目中,在运行pub get之前,您可以在这里仅添加所需的依赖项。

ijnw1ujt

ijnw1ujt8#

您可以通过键入terminal dart pub remove <packagename>来删除
示例:要删除flutter_svg:^0.22.0,请键入dart pub remove flutter_svg
有关更多信息,请查看https://dart.dev/tools/pub/cmd/pub-remove

gzjq41n4

gzjq41n49#

Flutter通过运行以下命令来解决这个问题:

$ flutter pub cache repair

首先,我尝试删除***webview_flutter:4.1.0***from pubspec.yaml 并运行

$ flutter clean
$ flutter pub get

但是Flutter在 .pub-cache/hosted 目录中保存了流行包的缓存版本,因此您必须手动删除缓存的包,或者最好运行第一个命令。
使用Flutter:3.7.10和Dart:2.19.6

相关问题