如何在Flutter非Web构建中排除间接引入的包资源?
解决Flutter非Web构建时排除flutter_opencc_ffi_web的JS资源问题
解决思路
Flutter自带的build.yaml对间接依赖包的资源排除支持有限,之前的配置没生效很正常。要搞定非Web构建时去掉那1MB JS资源,试试下面几个方法:
1. 只在Web平台引入这个依赖
既然这是个Web专属的包,非Web平台根本没必要引入它。直接改项目的pubspec.yaml,把依赖改成条件加载:
dependencies: # 其他通用依赖照写 flutter_opencc_ffi_web: # 这里填你的包地址,比如pub版本或者git地址 version: ^x.x.x conditional: platforms: web: enabled: true android: enabled: false ios: enabled: false linux: enabled: false windows: enabled: false macos: enabled: false
如果是间接依赖(比如某个别的包引了它),就用dependency_overrides强制控制:
dependency_overrides: flutter_opencc_ffi_web: conditional: platforms: web: enabled: true default: enabled: false
2. 用Flutter资源配置文件过滤(备选)
要是必须保留依赖但只想删资源,Flutter 3.10以上版本可以用flutter_assets.yaml来过滤。在项目根目录新建这个文件:
flutter: assets: exclude: - packages/flutter_opencc_ffi_web/assets/opencc/**
构建非Web包的时候指定这个配置:
flutter build apk --dart-define=FLUTTER_ASSETS_CONFIG=flutter_assets.yaml
(把apk换成你要构建的平台,比如ios、windows等)
3. 修正build.yaml的写法
之前的build.yaml配置不对,针对依赖包的资源排除要配合asset_builder来写,而且要分平台配置:
targets: $default: sources: exclude: - assets/packages/flutter_opencc_ffi_web/assets/opencc/** builders: flutter_web_builders|asset_builder: options: exclude: - packages/flutter_opencc_ffi_web/assets/opencc/** # 给各个非Web平台单独加排除规则 android: dependencies: flutter_opencc_ffi_web: exclude: - assets/opencc/** ios: dependencies: flutter_opencc_ffi_web: exclude: - assets/opencc/** linux: dependencies: flutter_opencc_ffi_web: exclude: - assets/opencc/**
怎么确认生效
构建完非Web包后,去产物的assets目录里看看,packages/flutter_opencc_ffi_web/assets/opencc下面的JS文件没了就说明成了。
内容的提问来源于stack exchange,提问作者Brave Dolphin
相关产品推荐
相关产品推荐

