我正在开发一个用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任务的情况下发送pull请求,则/src和/lib中的文件将不同步
我的问题是,在GitHub项目中处理这些构建任务的最佳方式是什么。我已经研究了travis,它已经在为我做测试了,但我不确定travis是否应该或可以将代码推送到repo。毕竟,最好不要提交构建文件,因为它们无论如何都可以从源代码中计算出来?
首先,将转换后的代码存储在版本控制下根本不是一个好主意。
看看history
项目是如何解决的:https://github.com/rackt/history/blob/master/npm-scripts/postinstall.js
他们有一个用于NPM的postinstall
脚本,该脚本检查模块是否尚未构建并构建它
如果你把这个东西添加到你的回购中,你的消费者将在安装过程中动态构建模块。此外,如果您要在NPM注册表中发布此文件,请不要忘记包含已构建的文件以减少安装时间。