
关系型数据库数据库前端【免费下载链接】lovefieldLovefield is a relational database for web apps. Written in JavaScript, works cross-browser. Provides SQL-like APIs that are fast, safe, and easy to use.项目地址https://gitcode.com/gh_mirrors/lov/lovefield点击查看免费下载Lovefield 是 Google 出品的纯 JavaScript 关系型数据库面向 Web 应用提供 SQL 风格 API跨浏览器Chrome 37、Firefox 31、IE 11、Edge、Safari 10运行。本文以仓库中的 docs/dev_setup.md 为主线结合 package.json、gulpfile.js、tools/builder.js、tools/run_test.js 等源码完整讲解从零搭建 Lovefield 开发环境、用 Closure 编译器构建产物、用 Selenium WebDriver 跑单元测试本地与 Sauce Labs 云端两种模式以及向项目提交贡献前必须通过的完整校验流程。读完本文你将能独立完成 Lovefield 仓库的安装、构建、测试与贡献准备。前置条件Java、Git 与 Node.jsLovefield 的开发工具链由三部分基础环境支撑文档明确要求它们处于可用状态且必须能被 PATH 搜索到JavaClosure JavaScript Compiler 以 JAR 形式运行需要 Java 运行时。Git版本管理与贡献流程Pull Request的基础。Node.jsLovefield 的各种开发工具gulp、Closure 编译器 npm 包、selenium-webdriver 等都运行在 Node.js 之上。Node.js 版本建议以 package.json 中的声明为准——当前仓库声明engines: { node: 12.16.3 }而 .travis.yml 中 CI 使用node_js: 12.16.3两者相互印证本地开发建议使用不低于 12.16.3 的 Node.js 版本。值得注意的细节gulp 任务本身也依赖 Node.js 生态。仓库在devDependencies中固定了gulp: 4.0.2、gulp-closure-compiler、gulp-gjslint、jasmine、selenium-webdriver: ^3.6.0、google-closure-compiler-java与google-closure-library: 20190618.0.0等关键开发依赖安装时请保持这些版本约束避免工具链行为漂移。Windows 用户的特殊注意事项Windows 命令提示符Command Prompt存在命令行长度限制而 Closure 编译器需要一条远超该限制的命令行才能运行这会导致编译失败。文档给出的解决方案是安装一个能突破此限制的命令行工具例如TCC/LETake Command Console / Light Edition。在 Windows 下开发时请改用这类工具执行 gulp/Closure 编译命令而不是直接使用原生 Command Prompt。设置开发环境依赖安装Lovefield 使用npm作为依赖管理器。克隆仓库后在仓库根目录即 package.json 所在目录执行npm update该命令会拉取 Lovefield 所需的全部依赖其中最重要的两个google-closure-compiler-javaClosure 编译器本体JAR由 npm 自动下载无需手动安装编译器。它的路径在 tools/config.js 中被解析为node_modules/google-closure-compiler-java/compiler.jar。google-closure-libraryClosure 库源码用于测试环境的依赖解析路径为node_modules/google-closure-library。构建 LovefieldClosure 编译器 gulpLovefield 使用gulp作为构建管理器使用Closure JavaScript Compiler对代码进行校验、压缩minify与混淆uglify。Closure 编译器由 npm 自动带入见上文。在仓库根目录直接运行gulp不带任何参数即可看到全部支持的构建命令。从 gulpfile.js 的 default 任务源码中可以提取出完整的命令清单命令功能gulp build --targetlib --modeopt\|debug使用 Closure 编译器生成dist/lf.jsgulp build --targettests --filterpattern使用 Closure 编译器编译测试gulp debug [--targettests\|perf] [--portnumber]启动调试服务器默认测试、端口 8000gulp lint对源码文件执行 lintgulp test --targetspac运行 SPAC 测试gulp test --targetperf [--browsertarget]使用 WebDriver 运行性能测试需单独安装驱动gulp test --targettests [--filterpattern --browsertarget]使用 WebDriver 运行单元测试需单独安装驱动从源码看gulp test --targettests目前支持的浏览器目标是chrome|firefox|ie|safari且--browser与--filter两个标志都可以重复传入多次以同时跑多个浏览器或按多个模式过滤测试。构建库产物gulp build --targetlib这是贡献者最常用、也最重要的构建命令。核心逻辑位于 tools/builder.js 的buildLib通过depsHelper.scanDeps()扫描源码依赖将依赖文件与lib/**/*.js全部库源码一起交给 Closure 编译器注入builddef/firebase_externs.js作为 externs 声明输出文件名为lf.js写入dist/目录期间还会剥离许可证头StripLicense。编译模式由--mode决定两种模式的差异定义在 tools/config.js--modeopt发布模式compilation_level: ADVANCED高级优化同时生成dist/lf.js.map源映射并通过define: goog.DEBUGfalse关闭 Closure 的调试代码。这是贡献流程要求使用的模式。--modedebug调试模式启用debug并设置formatting: PRETTY_PRINT便于阅读与断点调试。无论哪种模式都叠加了一组公共编译标志warning_level: VERBOSE、language_out: ECMASCRIPT5_STRICT并开启了一长串jscomp_error严格检查包括checkTypes、missingProperties、undefinedNames、visibility等这意味着构建过程本身同时就是一次严格的类型与代码质量校验——任何类型错误都会导致构建失败。构建测试gulp build --targettests该命令编译tests/**/*_test.js下的全部测试文件也可用--filterpattern只编译匹配的测试。buildAllTeststools/builder.js的实现细节值得了解通过 glob 收集所有*_test.js文件按 filter 过滤每个测试文件单独交给 Closure 编译器编译debug 模式编译前会先用SPACSchema Parser And Code generator为测试所需的 schema 生成代码——生成对象由 tools/config.js 中的TEST_SCHEMAS定义包括testing/hr_schema/hr_schema.yaml、testing/hr_schema/hr_schema_bundled.yaml、testing/order_schema.yaml与testing/perf/hr_schema_no_fk.yaml并行度受环境变量CONCURRENT_BUILDER控制默认 8可调高以加速构建。测试 LovefieldSelenium WebDriverLovefield 使用Selenium WebDriver驱动真实浏览器运行自动化测试。运行单元测试有两条路径本地测试调试与快速反馈与Sauce Labs 云端测试跨浏览器矩阵验证。此外仓库中实际存在三类测试见 docs/running_tests.md单元测试验证库的正确性即gulp test --targettests对应的主体SPAC 测试验证 SPAC 代码生成器的正确性绝大多数使用者用不到性能测试用于监控 Lovefield 性能主要由测试机器人运行。方式一本地测试Local从 Selenium 官方渠道手动下载并安装目标浏览器的WebDriverChromeDriver、geckodriver、IEDriverServer、SafariDriver 等并确保其可被 Selenium 发现。在仓库根目录执行gulp test --targettests --browserbrowser其中browser取值为chrome、firefox、ie或safari。文档特别说明本地测试适用于调试与快速迭代quick turn around。如果不指定--browsergulpfile.js 会回退读取环境变量SELENIUM_BROWSER再回退到默认值chrome。本地测试的底层机制结合源码gulpfile.js 的 test 任务会先通过 tools/run_test_server.js 启动一个基于 gulp-connect 的静态服务器默认端口 8000开启 livereloadtools/setup_tests.js 会创建临时测试目录建立lib、perf、testing、tests、dist等目录的符号链接为没有自带 HTML 的*_test.js生成 HTML 测试页面生成deps.js与测试索引index.html并调用 SPAC 生成测试 schema 代码tools/run_test.js 的runJsUnitTests通过 selenium-webdriver 启动浏览器逐个访问http://localhost:8000/html/...下的测试 URL由 tools/jsunit_test_runner.js 汇总结果最终控制台会输出形如N tests, M failure(s).的汇总以及[ chrome ] JSUnit tests: PASSED/FAILED的着色结果。方式二Sauce Labs 云端测试Sauce Labs 提供云端浏览器矩阵适合在多种浏览器上做回归验证。步骤如下在 Sauce Labs 注册账号在本机运行Sauce Connect打通本机与 Sauce 云之间的安全隧道配置环境变量并逐个浏览器执行文档给出的脚本假设 Linux/Mac 与 bashWindows 用户请按自身环境调整export SAUCE_USERNAMEyour username export SAUCE_ACCESS_KEYyour sauce token export SELENIUM_BROWSERchrome gulp test --targettests export SELENIUM_BROWSERfirefox gulp test --targettests export SELENIUM_BROWSERie gulp test --targettests export SELENIUM_BROWSERsafari gulp test --targettests用户名与 Sauce token 可在 Sauce Labs 账户设置中获取。从 tools/run_test.js 的实现可以看到选择逻辑一旦检测到环境变量SAUCE_USERNAME已设置WebDriver 构建就会自动切换为远端模式getRemoteWebDriver连接到http://username:access_keyondemand.saucelabs.com:80/wd/hub否则使用本地驱动。因此上述脚本只需要设置环境变量即可完成模式切换无需修改任何命令。Sauce 模式下的浏览器能力矩阵来自getRemoteWebDriver的 switch 分支也值得了解chrome 对应 Linux 平台、firefox 对应 Linux、safari 对应 OS X 10.11 的 Safari 10.0、ie 对应 Windows 7 的 IE 11.0——这正是 Lovefield 声明的跨浏览器支持范围。手动调试测试gulp debug在跑自动化之前也可以手动在浏览器中观察测试行为。执行gulp debug默认启动单元测试服务器并监听localhost:8000可用--targetperf切换为性能测试服务器用--portnumber改端口。然后用浏览器访问http://localhost:8000页面会列出全部测试的索引。文档强烈建议为浏览器创建独立的测试 profile再访问避免污染日常浏览数据。从 gulpfile.js 源码看debug任务不会自动退出需用Ctrl-C终止服务器。提交贡献前的完整校验流程先阅读贡献规则动手之前请先确认认可 CONTRIBUTING.md 中的规则文档在 docs/dev_setup.md 中明确要求阅读若不认可可止步于此。结合 CONTRIBUTING.md 的内容贡献流程还包括签署 Google 个人贡献者许可协议CLA、通过 GitHub Pull Request 提交代码、所有提交包括项目成员均需代码评审。如果你的修改未通过下述全部校验将被直接拒绝。贡献前必须通过的命令序列文档给出的完整校验脚本假设 Linux/MacWindows 请自行调整gulp build --targetlib --modeopt gulp build --targettests gulp lint gulp test --targetspac export SAUCE_USERNAMEyour username export SAUCE_ACCESS_KEYyour sauce token export SELENIUM_BROWSERchrome gulp test --targettests export SELENIUM_BROWSERfirefox gulp test --targettests export SELENIUM_BROWSERie gulp test --targettests export SELENIUM_BROWSERsafari gulp test --targettests每一步的含义与背后的校验逻辑gulp build --targetlib --modeopt以高级优化模式构建库产物验证源码能通过 Closure 编译器的全部严格检查VERBOSE 警告级别 完整 jscomp_error 列表gulp build --targettests编译全部测试文件验证测试代码同样满足编译要求gulp lint对perf/**/*.js、spac/**/*.js、src/**/*.js、tests/**/*.js、testing/**/*.js运行 gjslint见 gulpfile.js。文档特别提醒Google JavaScript 风格被无情地严格执行但 linter 无法覆盖所有检查项因此在代码评审中你可能还会遇到额外的 lint 意见gulp test --targetspac运行 SPAC 测试验证代码生成器未被破坏。该任务通过 child_process 派生 spac/run_test.js使用 Jasmine 执行spac/下所有*_test.js并加载spac/testdata/中的 YAML 测试数据与spac/template/中的模板gulp test --targettests× 4 个浏览器在 Chrome、Firefox、IE、Safari 上跑完整单元测试矩阵。注意前四条export SELENIUM_BROWSER...设定了每个浏览器目标且测试命令本身不再带--browser参数——这是环境变量驱动的典型用法。关于 Travis CI 的重要说明仓库本身配置了 Travis CI见 .travis.ymlCI 使用 Node.js 12.16.3通过SELENIUM_BROWSER环境变量矩阵builder1-3、chrome、ie、safari、firefox配合 Sauce Connect 在云端跑测试。但文档明确说明出于安全考虑外部贡献者的 Pull Request 不会触发 Travis CI 构建。因此你必须在本机完整运行上述脚本否则 PR 将直接被拒。也就是说本地跑通完整校验是贡献被接受的前提不能指望 CI 替你兜底。Markdown 文档规范仓库内所有 Lovefield 文档均使用GitHub 风格 Markdown编写。开发者可使用任意顺手的 Markdown 编辑器或预览器包括带预览的 IDE、命令行预览工具等来撰写与校对文档。仓库中的文档入口如 README.md、docs/spec_index.md、docs/dd_index.md都通过相对路径互相链接修改文档时请保持链接的相对路径有效。常见问题与排查要点结合源码补充几个文档未展开、但实践中极易遇到的坑Closure 编译失败且报错信息极长在 Windows 原生 Command Prompt 下运行时几乎可以肯定是命令行长度限制所致换用 TCC/LE 之类的命令行工具即可这正是文档提示的初衷。本地测试找不到浏览器驱动gulp test --targettests报 WebDriver 相关错误时优先检查对应浏览器驱动是否已下载并加入 PATH或检查驱动版本与浏览器版本是否匹配。意外连上了 Sauce Labs一旦 shell 环境中残留SAUCE_USERNAME/SAUCE_ACCESS_KEYgulp test会静默切换到云端模式见 tools/run_test.js 的判断逻辑。只想本地跑时请先unset SAUCE_USERNAME。构建太慢gulp build --targettests默认并行度 8可设置CONCURRENT_BUILDER16之类环境变量加速见 tools/builder.js。Firebase 相关测试tests/backstore/下的 Firebase 测试需要额外的FIREBASE_URL与FIREBASE_TOKEN环境变量才可运行见 tools/setup_tests.js 的注入逻辑普通贡献者不必纠结于这部分。小结Lovefield 的开发环境搭建可以归纳为一条清晰的链路装好 Java/Git/Node.jsWindows 换 TCC/LE→npm update拉取依赖 →gulp build --targetlib --modeopt用 Closure 严格校验并产出dist/lf.js→gulp test --targettests --browserbrowser本地快速验证或通过SAUCE_USERNAME/SAUCE_ACCESS_KEY/SELENIUM_BROWSER三件套切换到 Sauce Labs 云端跑跨浏览器矩阵 → 贡献前按顺序跑完build(opt) → build(tests) → lint → test(spac) → test(tests)×4全套校验。由于外部 PR 不触发 Travis CI本地跑通全套校验是贡献被接受的硬性前提而 tools/builder.js、tools/run_test.js、tools/config.js 等源码则为你理解每一步内部到底发生了什么提供了完整的实现级参考。赞分享关系型数据库数据库前端【免费下载链接】lovefieldLovefield is a relational database for web apps. Written in JavaScript, works cross-browser. Provides SQL-like APIs that are fast, safe, and easy to use.项目地址https://gitcode.com/gh_mirrors/lov/lovefield点击查看免费下载相关推荐GitHub Desktop 开发环境搭建指南依赖安装、本地构建、测试与调试全流程GitHub Desktop 开发环境搭建指南依赖安装、本地构建、测试与调试全流程 本篇指南以 GitHub Desktop 官方贡献文档 docs/cont桌面应用版本控制开发工具Kitematic 开发者贡献指南环境搭建、Flux 架构与测试发布全流程Kitematic 开发者贡献指南环境搭建、Flux 架构与测试发布全流程 导读 本文面向希望为 Kitematic 贡献代码、修复缺陷或扩展新功能的开发者桌面应用RustScan 贡献指南Docker 开发环境搭建、构建测试与 Pull Request 全流程RustScan 贡献指南Docker 开发环境搭建、构建测试与 Pull Request 全流程 本篇指南以 RustScan 官方贡献文档 contri网络安全渗透测试CLI上一篇构建高效iOS界面联动TableView与CollectionView的协同架构指南下一篇Radius性能优化指南提升云原生应用效率的10个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考