【问题标题】:How to handle build tasks in an open source GitHub repository?如何处理开源 GitHub 存储库中的构建任务?
【发布时间】:2016-03-16 06:26:32
【问题描述】:

我正在开发一个用 Javascript ES6 编写的开源项目。我使用 babel 将其转换为 ES5。这样我就有了这样的文件夹结构:

/project
  /src   *raw ES6 files*
    handler.es6.js
    app.es6.js
  /lib   *transpiled files by babel*
    handler.js
    app.js
  /dist  *combined an minified files, ready to use*
    project.min.js

我使用 grunt 来编译一个缩小的 js 文件。 唯一可以手动更改的文件位于 /src 中。其他文件是自动生成的。因此,如果用户对app.es6.js 进行更改并发送拉取请求而不运行 grunt 任务,则 /src/lib 中的文件将不同步。
我的问题是,在 GitHub 项目中处理此构建任务的最佳方法是什么。我已经研究了 travis,它已经在为我做测试,但我不确定 travis 是否应该或可以将代码推送到 repo .毕竟最好不要提交构建文件,因为无论如何它们都可以从源代码中计算出来?

【问题讨论】:

  • 为什么 /lib 会被 git 跟踪?就我个人而言,我不希望 PR 包含构建工件。如果必须跟踪构建工件,我会在合并 PR 后重新构建。
  • Felix 提出了正确的问题。一般来说,生成的文件不应该在您的源存储库中。这可能意味着dist/ 也不应该在那里。
  • 很多流行的 repos 像 github.com/paperjs/paper.js 都有一个 /dist 文件夹。我认为提供代码的构建版本是一个好习惯。你绝对是对的。

标签: javascript github build-process ecmascript-6 travis-ci


【解决方案1】:

首先,将转码后的代码存储在版本控制下根本不是一个好主意。

看看history项目是怎么解决的:https://github.com/rackt/history/blob/master/npm-scripts/postinstall.js

他们有一个用于 NPM 的 postinstall 脚本,它会检查该模块尚未构建并构建它。

如果您将这个东西添加到您的存储库中,您的消费者将在安装过程中即时构建模块。此外,如果您要在 NPM 注册表中发布它,请不要忘记包含构建文件以减少安装时间。

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 2022-01-21
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2018-10-04
    相关资源
    最近更新 更多