如何在sbt-web中为Play 2.3的Prod/Dev环境配置不同PipelineStages
针对Play Framework 2.3环境差异化配置资产管道
我刚好熟悉Play 2.3的资产管道机制,你的需求完全可以通过分环境配置sbt设置来实现。首先得明确:Play默认只在生产模式下执行pipelineStages里的阶段,开发模式下会跳过,所以你需要单独给Dev环境显式配置对应的阶段和监听逻辑。
以下是具体的配置步骤,直接修改你的build.sbt即可:
1. 移除全局的pipelineStages配置
先删掉你原来的pipelineStages := Seq(transpile, uglify),我们要把这个配置拆分到不同环境里。
2. 配置生产环境的资产阶段
给Prod环境单独指定transpile + uglify的流程:
inConfig(Prod)(Seq( pipelineStages := Seq(transpile, uglify) ))
这样用start或者dist命令启动生产环境时,会自动执行这两个阶段,和你之前的预期一致。
3. 配置开发环境的资产阶段
开发环境我们只需要transpile,还要加上文件监听,这样修改JS源文件时会自动重新编译:
inConfig(Dev)(Seq( // 启用transpile阶段 pipelineStages := Seq(transpile), // 将JS源文件目录添加到监听列表,触发自动重新transpile watchSources ++= (baseDirectory.value / "app" / "assets" / "js" ** "*.js").get ))
这里的路径app/assets/js是默认的JS源文件目录,如果你的源文件放在其他位置,记得修改这个路径。
生效逻辑解释
- 当你用
run命令启动开发环境时,Play会先执行一次transpile,之后只要监听目录下的JS文件有变化,就会自动重新执行transpile,不用重启应用。 - 生产环境下的
start/dist命令则会按配置执行transpile + uglify,输出压缩后的最终JS文件。
内容的提问来源于stack exchange,提问作者Lennholm
相关产品推荐
相关产品推荐

