最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    正文概述 掘金(Deno钻研之术)   2021-05-28   476

    欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    一个包含希腊斯巴达头盔的罗马项目 Logo

    二月的最后一天,我在为 “开源爱好者月刊”搜寻本月最新的开源项目时,偶遇一个名叫 Rome 的仓库霸榜,眼前着实一亮。“一个实验性的 JavaScript 工具链”、“包括编译器、lint、格式化程序、捆绑器、测试框架等”以及 “旨在成为与 JavaScript 源码处理相关的所有功能的综合工具” 短短几句话展现了一个宏大的目标。现在,是时候入坑了解一波并在个人能力范围内作一个浅要的分享。

    Rome 由就职于 Facebook 同时是 Babel 和 Yarn 作者的 Sebastian McKenzie 主导开源,开源之前,Rome 基本是他的个人项目,现在 Facebook 愿意付薪水让他潜心开发。截止现在(2020 年 04 月初),Rome 的提交记录已经从 70+ 到 600+,贡献者拓展到了 40+ 位,产生了 30+ issues 和 170+ Pull Request。

    欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    此外,或许也能从侧面呼应我曾在月刊第三期中收录的一句关于 “创业公司和大公司开源出发点有何不同” 的话:大公司可能在一个项目的早期便开源,凭借其号召力希望更多人一起 “贡献” 迭代,初创团队则会在产品相对成熟的时候再开放,希望尽快吸引用户深度“使用”,注重完善产品在工业环境下的综合表现。

    正文 & 背景 & 干货开始。

    Rome:从个人项目到 Facebook 新开源

    从官网不难看出,Rome 旨在成为与 JavaScript 源代码处理相关的所有功能的综合工具,其中包括 “编译器、Linter、格式化程序、捆绑器、依赖管理器和测试框架” 等。Rome 源于对整个项目的扩展范围一致性的渴望。

    同时,Rome 也来源于 Babel 作者本身对 Babel 的一些不满足而新创,就像 Deno 之于 Node 一样。

    欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    本节根据 README.md 和官网首页的介绍,来以问答形式展示 Rome 的背景和想要达到具体目标。

    01、Rome 的一些来源?

    • 立项来源:由 Babel and Yarn 的作者 Sebastian McKenzie 发起,是 React Native 团队的一个项目。
    • 名称来源:因 “通向罗马的所有道路”,“罗马不是一天建成” 和“在罗马时要像罗马人一样”这样的谚语而得名。 这是指整个项目的扩展范围和对一致性的渴望,它始于一个办公室玩笑。
    • Logo 来源:一个古希腊斯巴达头盔。虽然它不是罗马字母,也不太相关,但看起来比 Galea (罗马士兵的头盔)酷。

    02、Rome 的编码架构?

    • 完全使用 TypeScript 编写,很少使用松散类型。
    • 支持处理 JSX 以及 Flow 和 TypeScript 代码。
    • self-hosted,可以自己编译自己。
    • 不是现有工具的集合,所有组件都是自定义的,不使用第三方依赖项(对 JavaScript 生态系统进行了重新思考,对整个工具链采用了不依赖第三方库的大胆实现)。
    • 是带有内部软件包的 monorepo 架构以便划定代码边界。

    03、Rome 的工作展望?

    • 旨在成为与 JavaScript 源代码处理相关的所有功能的综合工具。
    • 目标是替代许多现有的 JavaScript 工具,但也将提供为其他工具提供自身的集成方案,以根据需要随意使用——例如使用 Rome 编译器作为另一个捆绑程序的插件
    • 目前关注的领域是 Linter(用于分析源代码以标记编程错误,bug,样式错误和可疑结构的工具),这是将 Rome 变成最容易使用的工具链的目标里阻力最小的一个环节。

    微栏:回看 JavaScript 工具链

    成熟的软件项目必然遵循的良好的开发规范,也拥有属于自身独特的软件开发生命周期,编程实践只占整个开发周期的很小一部分。当一个 JavaScript 软件被建立时通常还会遇到哪些需要解决的问题?这便涉及到了 JavaScript 项目的技术选型,而 JavaScript 生态圈的明星项目数不胜数,以下作一个纵览,不涉及各个工具的具体使用方式。

    欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    JavaScript 工具链示意图

    • JS 开发环境?有 V8、Node 甚至是 Deno 等;
    • JS 前端框架?有 Angular、React、Vue、React Native、jQuery 等;
    • JS 后端框架?有 Nest、Express、Koa 等;
    • JS 脚手架?有 Vue CLI、Angular CLI、Create React App、Yeoman 等;
    • JS 转译工具?有 Babel 等;
    • JS 测试工具?围绕单元测试、集成测试,有 Mocha、Jasmine、Jest、Karma 等;
    • JS 调试工具?有 Chrome DevTools/Firebug/Webkit inspector 等各大主流浏览器、VS Code/WebStorm 等各大编辑器 / IDE 等;
    • JS 格式规范工具?有 JSLint、JSHint、ESLint、TSLint 等;
    • JS 接口联调工具?有 Axios、Fetch 等;
    • JS 包管理器?有 NPM、Yarn、Bower、PNPM 等;
    • JS 模块加载器?有 RequireJS、SystemJS、StealJS、ES Module Loader 等;
    • JS 任务管理工具?Grunt、Gulp、Webpack 监听文件变化,自动执行任务;
    • JS 静态化支持?有 TypeScript、CoffeeScript、Flow、LiveScript 等;
    • JS 代码后处理工具?围绕混淆器、缩小器、优化器诸多领域有各种各样的 loader 等;
    • JS 打包工具?Webpack、Rollup、Parcel、Browserify 等;
    • JS 模板引擎?有 handlebarsjs、etpl、templatejs 甚至各大前端框架内置的模板语法等;
    • JS 非 Web 框架?在物联网、区块链、大数据等领域均有相关库支持,本文不涉及。
    • JS 进程管理?有 Forever、PM2、StrongLoop Process Manager 等;
    • ......?甚至编辑器、IDE、CSS 预处理器、代码托管平台、团队开发模式 (纯前端、重后端、前后分离)、WebAssembly、Serverless、JS DevOps 等都可以加到项目的技术选型范围内。

    因此可以看出,技术选型便是针对能让项目成功运转各个环节寻找相应的解决方案;工作流(Workflow)是所有解决方案融合后的落实流程;而工具链(Toolchain)便是工作流下所有实现方式的汇总,同时一个工具也能代表一个解决方案。

    简而言之,JavaScript 工具链便是 JavaScript 工程师在开发过程中会用到的一系列工具。

    浅尝初试 Rome (v0.0.52)

    现在 Rome 并没有直接在 Github 上发布任何版本,但编译后生成的 rome.json 可以看出有一个 v0.0.52 的版本号,处于一个很早期的状态,项目简介也是 “一个实验性的 JavaScript 工具链”。

    想要尝试 Rome,就得从以下步骤逐步展开(由于 Rome 没有发布正式版本,这里无需过多涉及如何整合在 package.json 的脚本中使用等工程化过程)。

    欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    帝国时代里的罗马大军

    本章所有 Demo 均在 @hylerrix/demos 的 Rome 文件夹中。

    01、git clone rome

    既然 Rome 没有正式发布版本,我们也无法直接从 NPM 上直接安装 Rome。现阶段,Rome 提供了本地安装的方式,只需要克隆到本地并本地编译和本地 NPM 安装即可使用。

    02、rome init

    rome init 命令会在当前目录生成一个 rome.json 文件,使用推荐配置会初始化以下内容:

    该文件告诉 Rome 至少应为 0.0.52 版本,以便与当前项目一起使用。具体使用文档还在开发中。

    03、rome run index.ts

    rome run 命令将运行传递给它的任何文件,通常与项目的主文件一起使用。目前仍在开发中,可能无法正确处理所有源文件。此时我们为测试 rome run 成功运行,建立一个 index.ts 和 api.ts 文件,如下。

    此时,运行如下命令便可以成功使用:

    04、rome lint index.ts

    由于我真的不喜欢在 JavaScript 应用里面写分号,这与主流规范有些不同,所以 rome lint 命令刚好派上了用场:rome 默认需要在 JavaScript 语句结尾写分号。同时在 api.ts 中故意不导出一个 interface 且在 index.ts 中故意将其错误导入,重构后的有错误 index.ts 和 api.ts 以及 rome lint 后执行过程如下:

    rome lint 命令在这里提示我们需要加分号并需要在 api.ts 中成功导出 interface。前者可以使用 rome lint index.ts --fix 直接来修理(不会在 api.ts 中添加分号);后者需要手动修理,但是提供了十分完善的友好提示。

    05、rome compile index.ts

    rome compile 命令将使用一组默认转换来编译文件。由于在开发中,当前此命令没有用于指定转换子集的选项。使用这条命令后,输出的结果已经没有了 interface 的存在。

    06、rome parse index.ts

    rome parse 命令将解析文件并输出格式精美的 AST。

    07、Rome 的更多命令

    除了官网展示的几个命令外,从源码可以看出还有很多内置的命令正在开发,可以从 rome --help 中寻找答案。

    参考资料

    • [English] Rome Github Project
    • [English] Rome, a new JavaScript Toolchain
    • [English] Rome Official Announcement
    • [English] Rome Timeline
    • [English] Facebook Introduces Rome Experimental JavaScript Toolchain
    • [English] 01: Sebastian McKenzie on Babel and the Road to Rome - The Babel Podcast
    • 前端工具链课(一)—— 包管理工具
    • Rome:Facebook 最新 JS 工具上手

    总结 & 订阅

    经过近几年的蓬勃发展,JavaScript 早已不再局限于 “前端开发” 的领域中。因此本篇写作的角度并不是仅仅以前端开发为主体探索,而是将 JavaScript 本身抽离出来,这也是自己逐步理清职业发展的一个重要改变。

    本文通过学习和写作分享对 Rome 进行了简要的了解,但这还仅仅是入门。自己对 Babel 本身并不熟,还有很多学习过程中产生的疑惑都无法现在进行合适的解答,比如 “Rome 和 Babel 的具体异同”、“如何看待 Rome 仓库使用 Git 跟踪 Node Modules”、“Rome 替代现有工具或进行集成方案的具体原理” 以及 “Rome 的打包流程有何特点” 等,挖个坑可以一起交流。

    无论最终是否使用 Rome,能引发对 JavaScript 工具链的重新思考也会很有收获。

    最后,感谢你的阅读,公众号 (@ningowood) 及配套群聊欢迎加入,同时欢迎给如期更新了三期,即将支持线上 UI 界面浏览并提供更多拓展功能的 “开源爱好者月刊(@ningowood/open-source-magazine)” 仓库点个 Star 吧!(Github 好久没涨粉丝了,也欢迎关注我~)


    起源地下载网 » 欲取代绝大多 JavaScript 工具链?Rome 尝鲜

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元