簡體   English   中英

如何在Play 2.3.1模板中啟用縮小的JavaScript文件?

[英]How to enable minified JavaScript files in Play 2.3.1 templates?

我能夠在我的Play Framework 2.3.1應用程序中加載sbt-uglify 1.0.3插件。 加載非縮小的javascripts非常簡單,但加載縮小版本似乎是不可能的。

在我的模板中,我使用類似於此的<script>標簽:

<script src="@routes.Assets.at("javascripts/app.js")"></script>

在開發模式下,加載了非縮小的javascript版本,這很好。 在prod模式下(使用activator start ),我看到sbt-uglify生成縮小版本到target/web/uglify/build文件夾,但因為我沒有在模板中更改上面的<script>標記行,所以非縮小版本加載了javascripts文件的版本。

有沒有辦法對這些路由進行僅prod映射以加載縮小版本?

反向路由器應該在生產中自動使用縮小資產的問題在Play 2.3.1中得到修復,完全符合您的要求。

根據Play 2.3.1更改日志

Assets反向路由器的行為已經改變,如果存在縮小版本的資產,它現在返回一個URL。 要禁用此行為,請在application.conf設置assets.checkForMinified=true

注意它應該讀取set assets.checkForMinified=false ,但無論如何......

接下來在生產模式下的作品只有這么開始與應用程序activator startrun或使用生成的啟動腳本(后stage )。

默認情況下,應在Play with @routes.Assets.versioned (而不是routes.Assets.at )的版本中啟用在生產中使用縮小版資產的行為。

它確實要求conf/routes中的適當路由聲明是:

GET  /assets/*file  controllers.Assets.versioned(path="/public", file: Asset)

我最初發現有點不清楚的是pipelineStages中元素的順序以及在其中包含sbt-rjs的要求。

就在我寫了關於我在Play 2.3遷移指南的 “RequireJS”部分中找到的順序的句子之后:

階段的順序很重要。 您首先要優化文件,生成它們的摘要,然后生成所有結果資產的gzip版本。

我也在“關閉編譯器”部分的Play 2.3遷移指南中找到了:

目前通過RequireJS插件(下面描述)提供UglifyJS 2。 未來的目的是為不使用RequireJS的情況提供獨立的UglifyJS 2插件。

這一切都始於Play 2.3 sbt-web插件Javascript縮小的答案。

所以,下面的pipelineStages是工作的 - 記住命令和rjs

pipelineStages := Seq(rjs, uglify, digest, gzip)

project/plugins.sbt使用如下:

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")

addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")

addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")

addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0")

addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.6")

不要忘記創建一個空的app/assets/javascripts/main.js文件讓sbt-rjs完成它的工作。

作為測試,我使用activator new playApp play-scala創建了一個Play應用程序,並在構建以及app/views/main.scala.html中應用了上述更改,最終看起來如下(注意@routes.Assets.versioned ):

@(title: String)(content: Html)

<!DOCTYPE html>

<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@routes.Assets.versioned("stylesheets/main.css")">
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.versioned("images/favicon.png")">
        <script src="@routes.Assets.versioned("javascripts/hello.js")" type="text/javascript"></script>
    </head>
    <body>
        @content
    </body>
</html>

執行activator start並調用curl http://localhost:9000給出(格式化為我的可讀性):

➜  play-uglify  curl http://localhost:9000

<!DOCTYPE html>

<html>
    <head>
        <title>Welcome to Play</title>
        <link rel="stylesheet" media="screen" href="/assets/stylesheets/d41d8cd98f00b204e9800998ecf8427e-main.css">
        <link rel="shortcut icon" type="image/png" href="/assets/images/84a01dc6c53f0d2a58a2f7ff9e17a294-favicon.png">
        <script src="/assets/javascripts/4302136334616ae0605d47a1932ee262-hello.min.js" type="text/javascript"></script>
    </head>
    <body>
        <h1>Your new application is ready.</h1>
    </body>
</html>

注意4302136334616ae0605d47a1932ee262-hello.min.js和消化的非JavaScript資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM