活动介绍
file-type

纯Dart语言实现自动化打包上线脚本

ZIP文件

下载需积分: 50 | 35KB | 更新于2024-12-16 | 53 浏览量 | 1 下载量 举报 收藏
download 立即下载
Dart语言是一种由Google开发的编程语言,它支持多种编程范式,包括面向对象、函数式、命令式和泛型编程。自从2011年发布以来,Dart一直专注于为客户端开发提供高效的性能,尤其在Web应用领域。 在实际的开发过程中,打包和上线是将软件产品发布给用户的关键步骤。打包是将代码、资源、配置等封装成可分发的格式,上线则是将打包后的应用部署到服务器或者通过其他方式分发给用户。这个过程可能涉及到编译、压缩、测试、部署等多个环节,自动化这一流程可以显著提升开发效率和减少人为错误。 使用纯Dart语言编写的自动化打包上线脚本,即“dart_build_script”,展示出了Dart语言在自动化构建任务方面的潜力和灵活性。在前端开发中,打包脚本通常是基于Node.js平台和诸如Webpack、Gulp等工具完成的。而在Dart生态系统中,开发者可以使用dart_build_script这样的脚本来实现自动化构建,这表明Dart不仅可以在客户端应用开发中大显身手,也能用于构建工具和脚本编写。 该脚本的核心功能可能包括但不限于以下几点: 1. 源代码编译:将Dart源代码编译成JavaScript代码,以便在浏览器中运行。 2. 依赖管理:自动识别并包含项目所需的所有依赖库。 3. 文件压缩和优化:对资源文件进行压缩,减少应用体积,提高加载速度。 4. 测试自动化:运行单元测试和集成测试,确保打包的应用质量。 5. 部署脚本:自动化部署到服务器或者其他分发平台。 6. 版本控制:自动增加版本号,管理应用的不同发布版本。 在Dart的生态系统中,有一个名为“pub”的工具包管理器,它支持下载依赖、打包应用等操作,类似于Node.js中的npm或Yarn。dart_build_script脚本可能就是基于pub工具或者自己实现了类似pub的功能。 使用纯Dart语言编写这样的脚本有几个潜在的优点: - 一致性:由于脚本本身也是用Dart编写的,因此它能够和Dart项目无缝集成,为开发者提供一致的开发体验。 - 性能:Dart语言拥有优秀的性能,这意味着打包和上线脚本在执行时将更加迅速。 - 现代化工具:随着Dart 2.0的发布,语言本身得到了显著的改进,提供了更现代化的编程工具和API。 - 学习曲线:对于已经熟悉Dart的开发者来说,学习和使用这样的脚本将更加容易。 然而,也应当意识到Dart仍然是一款相对较新的语言,它在构建工具和自动化脚本方面的生态系统可能不如一些成熟语言丰富。尽管如此,随着Dart的持续发展,这些领域的工具和库也会逐渐完善。 总之,dart_build_script作为一款使用纯Dart语言编写的自动化打包上线脚本,不仅展示了Dart在构建和部署方面的潜力,也为Dart开发者提供了一个强大的工具来提升工作效率。随着Dart语言及其生态系统的成熟,我们有理由期待未来会有更多类似工具出现,进一步推动Dart在开发者社区中的普及和应用。

相关推荐

filetype

merge_root_path = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_MERGE_NAME) translation_excel_folder_path = os.path.join(merge_root_path, 'Translation_Excel') if not os.path.exists(translation_excel_folder_path): print('目标翻译文件 {0} 路径不存在'.format(translation_excel_folder_path)) exit(1) merge_android_src_path = os.path.join(merge_root_path, 'Android', 'values-old') merge_android_dst_path = os.path.join(merge_root_path, 'Android', 'values-new') merge_ios_src_path = os.path.join(merge_root_path, 'iOS', 'strings-old') merge_ios_dst_path = os.path.join(merge_root_path, 'iOS', 'strings-new') merge_flutter_src_path = os.path.join(merge_root_path, 'Flutter', 'l10n-old') merge_flutter_dst_path = os.path.join(merge_root_path, 'Flutter', 'l10n-new') merge_pc_src_path = os.path.join(merge_root_path, 'PC', 'old') merge_pc_dst_path = os.path.join(merge_root_path, 'PC', 'new') enable_android_merge = os.path.exists(merge_android_src_path) enable_ios_merge = os.path.exists(merge_ios_src_path) enable_flutter_merge = os.path.exists(merge_flutter_src_path) enable_pc_merge = os.path.exists(merge_pc_src_path) if not os.path.exists(merge_android_dst_path): os.makedirs(merge_android_dst_path) if not os.path.exists(merge_ios_dst_path): os.makedirs(merge_ios_dst_path) if not os.path.exists(merge_flutter_dst_path): os.makedirs(merge_flutter_dst_path) if not os.path.exists(merge_pc_dst_path): os.makedirs(merge_pc_dst_path) if enable_android_merge or enable_ios_merge or enable_flutter_merge or enable_pc_merge: refer_excel_file = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_COMMON_NAME, 'Refer_Standard.xls') if os.path.exists(refer_excel_file): refer_tuple = TranslateInfoExcelReader.read_excel_content_list(refer_excel_file) else: refer_tuple = [] translation_excel_file_list = os.listdir(translation_excel_folder_path) translation_excel_file_list = [x for x in translation_excel_file_list if x.endswith(".xlsx")] curr_time = time.strftime('%Y-%m-%d-%X', time.localtime(time.time())).replace(":", '') android_log_file_name = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_MERGE_NAME, 'Translation_Log', "AndroidLog" + str(curr_time) + ".txt") flutter_log_file_name = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_MERGE_NAME, 'Translation_Log', "FlutterLog" + str(curr_time) + ".txt") pc_log_file_name = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_MERGE_NAME, 'Translation_Log', "PCLog" + str(curr_time) + ".txt") ios_log_file_name = os.path.join(Config.CURRENT_WORKSPACE_ROOT_PATH, Config.CURRENT_WORKSPACE_MERGE_NAME, 'Translation_Log', "Log-漏翻记录.txt") extract_root_path = os.path.join(Config.WORKSPACE_BASE_PATH ) locale_json_dst_file = os.path.join(os.path.join(extract_root_path), 'all_englist_translate_dict.text') all_english_translate_dict = dict() with open(locale_json_dst_file, 'r', encoding='utf-8') as f: all_english_translate_dict = json.load(f) if os.path.exists(ios_log_file_name): os.remove(ios_log_file_name) for excel in translation_excel_file_list: excel_file = os.path.join(translation_excel_folder_path, excel) print(excel_file) excel_dict = TranslateInfoExcelReader.read_excel_content_dict(excel_file) for item in excel_dict.values(): check_formatter(item.english, item.translate_result) for refer in refer_tuple: if refer.translate_result in excel_dict: english = refer.english platform = refer.platform no = refer.no note = refer.note translate = FormatSpecifierParser.build_format_char(refer.english, refer.translate_result, excel_dict[ refer.translate_result].translate_result) excel_dict[english] = TranslateInfo(english, translate, platform, no, note) locale = excel.replace('.xlsx', '') for item in excel_dict.values(): # print(excel, item.english, item.translate_result) if item.english in all_english_translate_dict: all_english_translate_dict[item.english][locale] = item.translate_result else: tmp_translate_dict = dict() tmp_translate_dict[locale] = item.translate_result all_english_translate_dict[item.english] = tmp_translate_dict if enable_android_merge and locale in Config.ANDROID_LOCALE_DICT: locale_path = 'values-' + Config.ANDROID_LOCALE_DICT[locale] merge_android_src_english_file = os.path.join(merge_android_src_path, 'values', 'strings.xml') merge_android_src_locale_file = os.path.join(merge_android_src_path, locale_path, 'strings.xml') merge_android_dst_locale_path = os.path.join(merge_android_dst_path, locale_path) XmlMerger(excel_dict, merge_android_src_english_file, merge_android_src_locale_file, merge_android_dst_locale_path, android_log_file_name).merge(1) if enable_ios_merge and locale in Config.IOS_LOCALE_DICT: locale_path = Config.IOS_LOCALE_DICT[locale] + '.lproj' merge_ios_src_english_path = os.path.join(merge_ios_src_path, 'en.lproj') merge_ios_dst_english_path = os.path.join(merge_ios_dst_path, 'en.lproj') merge_ios_src_locale_path = os.path.join(merge_ios_src_path, locale_path) merge_ios_dst_locale_path = os.path.join(merge_ios_dst_path, locale_path) StringsMerger(locale, excel_dict, merge_ios_src_english_path, merge_ios_dst_english_path, merge_ios_src_locale_path, merge_ios_dst_locale_path).merge() if enable_flutter_merge and locale in Config.FLUTTER_LOCALE_DICT: locale_path = Config.FLUTTER_LOCALE_DICT[locale] merge_flutter_src_english_file = os.path.join(merge_flutter_src_path, 'intl_en.arb') merge_flutter_src_locale_file = os.path.join(merge_flutter_src_path, 'intl_' + locale_path + '.arb') merge_flutter_dst_locale_path = os.path.join(merge_flutter_dst_path, 'intl_' + locale_path + '.arb') FlutterMerger(excel_dict, merge_flutter_src_english_file, merge_flutter_src_locale_file, merge_flutter_dst_locale_path, flutter_log_file_name).merge(1) if enable_pc_merge and locale in Config.PC_LOCALE_DICT: locale_path = Config.PC_LOCALE_DICT[locale] merge_pc_src_english_file = os.path.join(merge_pc_src_path, 'en.json') merge_pc_src_locale_file = os.path.join(merge_pc_src_path, locale_path + '.json') merge_pc_dst_locale_path = os.path.join(merge_pc_dst_path, locale_path + '.json') FlutterMerger(excel_dict, merge_pc_src_english_file, merge_pc_src_locale_file, merge_pc_dst_locale_path, pc_log_file_name).merge(1) locale_json_dst_file = os.path.join(os.path.join(extract_root_path), 'all_englist_translate_dict_new.text') with open(locale_json_dst_file, 'w', encoding='utf8') as f2: json.dump(all_english_translate_dict, f2, ensure_ascii=False, indent=2) 代码解析

filetype
似蜉蝣
  • 粉丝: 31
上传资源 快速赚钱