shake-build-system - 如何使用shake-build为不同的环境构建?
问题描述
是否有一种内置方法可以将命令行参数传递给“shakefile”?我想通过--env production|development|staging
然后在我的规则中使用它来(稍微)改变每个环境的构建步骤。
解决方案
这个问题有两个方面 - 首先将标志放入 Shake,其次,使用它们来影响行为。
您可以使用任何 Haskell 命令行解析器将参数输入到 Shake 中,但 Shake 附带了对构建它的支持,这通常更容易:
data Flags = Production | Dev | Staging deriving Eq
flags = [Option "" ["production"] (NoArg $ Right Production) "Build production."
,Option "" ["dev"] (NoArg $ Right Dev) "Build dev."
,Option "" ["staging"] (NoArg $ Right Staging) "Build staging."
]
main = shakeArgsWith shakeOptionsn flags $ \flags targets -> do
want targets
... do whatever you want with the flags ...
return rules
为了使用标志来影响,您可能想要:
- 将构建输出与每个标志完全隔离,在这种情况下,更改目录并在每种情况下以不同方式设置 ShakeFiles 会使每个标志完全不同。
- 使用标志来更改输出路径,所以你总是有规则
dev/main.js
和prod/main.js
,然后你在做的时候参考标志want
来选择正确的规则。 - 将标志放入 Oracle 并将它们作为跟踪设置,因此当您从 prod 切换到 dev 时,有些东西会重建。
如果构建是 80%+ 不同,我会选择 1。如果你很少更改标志,3 可以工作。否则,我倾向于选择 2。但它们都有效,所以选择最简单的开始也不是不合理的。
推荐阅读
- r - 如何根据 R 中另一列中的值替换数据框列中的值?
- python - 布雷克内尔量表的多个可重现错误
- r - 错误: fct_collapse 中出现意外符号,库用于
- security - 数据库内部加密
- java - 在不将 Generic 作为输入的情况下检索 Generic Type 的 Class 实例
- ios - UITableView 单元格约束问题 - Swift
- python - 带有麦克风输入的 Python Librosa
- docker - 推送 docker 映像时,Github 包注册表不会覆盖标签
- selenium - 在 Selenium IDE 中执行测试套件而不刷新页面
- python - 运行 manage.py 时,将本地 Django 项目迁移到 pythonanywhere 会引发不正确的时区错误