首页 > 解决方案 > 如何使用shake-build为不同的环境构建?

问题描述

是否有一种内置方法可以将命令行参数传递给“shakefile”?我想通过--env production|development|staging然后在我的规则中使用它来(稍微)改变每个环境的构建步骤。

标签: shake-build-system

解决方案


这个问题有两个方面 - 首先将标志放入 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

为了使用标志来影响,您可能想要:

  1. 将构建输出与每个标志完全隔离,在这种情况下,更改目录并在每种情况下以不同方式设置 ShakeFiles 会使每个标志完全不同。
  2. 使用标志来更改输出路径,所以你总是有规则dev/main.jsprod/main.js,然后你在做的时候参考标志want来选择正确的规则。
  3. 将标志放入 Oracle 并将它们作为跟踪设置,因此当您从 prod 切换到 dev 时,有些东西会重建。

如果构建是 80%+ 不同,我会选择 1。如果你很少更改标志,3 可以工作。否则,我倾向于选择 2。但它们都有效,所以选择最简单的开始也不是不合理的。


推荐阅读