Flutter web执行flutter build web构建报dart2js及空安全错误
问题成因
- 报错里的
dart2js入口脚本废弃警告属于非致命提示,不会直接导致构建失败,真正中断构建流程的是健全空安全校验不通过。 - 调试模式可以正常运行是因为Flutter Web调试阶段默认使用dartdevc编译器,默认允许混合运行不支持空安全的依赖代码,不会强制做全量空安全校验。
- 执行
flutter build web时默认走release编译流程,使用dart2js编译器,会强制开启健全空安全检查,只要项目存在任意不支持空安全的依赖、或者自有代码未完成空安全适配,就会直接抛出错误终止构建。
修复方案
临时快速出包方案
如果需要快速生成构建产物、暂时无法完成全量空安全适配,可以在构建命令中追加参数关闭健全空安全校验,执行命令:
flutter build web --no-sound-null-safety
该命令的编译逻辑和调试模式对齐,允许非空安全的代码参与编译,可以直接完成打包。注意这种方式打出的包会有一定的性能损耗,空安全的代码防护能力无法全量生效,仅适合临时测试使用,不建议用于生产环境发布。
长期正规修复方案(生产环境推荐)
- 排查不支持空安全的依赖
执行以下命令扫描项目所有依赖,自动列出不支持空安全的依赖项、以及对应支持空安全的最低可用版本:
根据命令输出的提示,在flutter pub outdated --mode=null-safetypubspec.yaml文件中将对应依赖的版本号调整到支持空安全的版本区间,执行flutter pub get拉取更新后的依赖。 - 适配自有代码空安全
如果是项目内自行编写的业务代码未完成空安全迁移,可以执行以下命令启动官方空安全迁移工具,按照引导完成自有代码的空安全适配:dart migrate - 特殊情况处理
如果扫描后发现某第三方依赖已经停止维护,永远不会推出支持空安全的版本,可以寻找功能一致、且已经适配空安全的替代库完成替换,否则只能长期使用--no-sound-null-safety参数完成构建。
关于开头的dart2js废弃警告:该提示是旧版本Flutter SDK的兼容提示,不会影响构建结果,将Flutter SDK升级到3.0及以上的稳定版本后,该警告会自动消失,无需单独处理。
内容的提问来源于stack exchange,提问作者Zameer
相关产品推荐
相关产品推荐

