Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Play 2.3.1模板中启用缩小的JavaScript文件?_Javascript_Playframework_Sbt_Minify_Uglifyjs - Fatal编程技术网

如何在Play 2.3.1模板中启用缩小的JavaScript文件?

如何在Play 2.3.1模板中启用缩小的JavaScript文件?,javascript,playframework,sbt,minify,uglifyjs,Javascript,Playframework,Sbt,Minify,Uglifyjs,我能够在我的Play Framework 2.3.1应用程序中加载sbt uglify 1.0.3插件。加载非精简的Java脚本非常简单,但加载精简的版本似乎是不可能的 在我的模板中,我使用类似以下内容的标记: <script src="@routes.Assets.at("javascripts/app.js")"></script> 在开发模式下,加载非精简的javascript版本,这很好。在prod模式下(使用activator start),我看到sbt

我能够在我的Play Framework 2.3.1应用程序中加载sbt uglify 1.0.3插件。加载非精简的Java脚本非常简单,但加载精简的版本似乎是不可能的

在我的模板中,我使用类似以下内容的
标记:

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

在开发模式下,加载非精简的javascript版本,这很好。在prod模式下(使用
activator start
),我看到sbt uglify将缩小版本生成到
target/web/uglify/build
文件夹中,但由于我没有更改模板中的上述
标记行,因此会加载javascripts文件的非缩小版本

是否有一种方法可以对这些路线进行仅产品的映射以加载缩小版本?

该问题已在第2.3.1版中修复,完全符合您的要求

根据:

如果缩小,资产反向路由器的行为已经改变 存在资产的版本,它现在会返回这些版本的URL。到 禁用此行为,在中设置资产。checkForMinified=true
application.conf

注意,它应该读set
assets.checkForMinified=false
,但无论如何

以下内容在生产模式下工作,只有这样才能使用
activator start
启动应用程序,而不是
run
或使用生成的启动脚本(在
stage
之后)

默认情况下,应在Play with
@routes.assets.versioned
(而不是
routes.assets.at
)版本中启用在生产中使用精简版资产的行为

它确实要求
conf/routes
中的适当路由声明为:

GET  /assets/*file  controllers.Assets.versioned(path="/public", file: Asset)
起初,我发现有点不清楚的是pipelineStages中元素的顺序以及包含在其中的要求

就在我写了关于我在“RequireJS”一节中找到的顺序的句子之后:

阶段的顺序很重要。您首先要优化 文件,生成它们的摘要,然后生成所有文件的gzip版本 结果资产

我还在“闭包编译器”一节中找到:

UglifyJS 2目前通过RequireJS插件提供(如下所述) 下一步)。未来的目的是提供一个独立的UglifyJS 2 插件也适用于不使用RequireJS的情况

这一切都是从答案开始的

因此,下面的
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
):


请注意
4302136334616ae0605dd47a1932ee262 hello.min.js
和已消化的非JavaScript资源。

我还尝试使用uglify。然而,我不知道如何开始玩。如果你有一个例子,你能分享一下吗?我添加了uglify,digest,gzip到project+pipelineStages中,正如你所描述的。我还更改了视图中的'@routes.Assets.at'->'@routes.Assets.versioned'。使用“activator start”启动我的应用程序会生成缩小的Java脚本,但浏览器仍会加载原始的、非缩小的版本。但是当执行
activator start
命令时,我得到以下错误<代码>[info]已完成打包。java.util.regex.PatternSyntaxException:Unmatched closing')靠近索引47['”?([^\s']*)['”]?\s*:\s*[\[\[]?.['”].*/lib\(.*)['”]这一切都有效(非常感谢!),但有一个小问题。Play default提供缩小版(这很好)但是原始源代码也可以在:
/assets/javascripts/private javascript file.js.src.js
中公开获取。有没有办法删除这些文件并只保留缩小的和
.map
文件?我只是不知道,建议作为后续问题问这个问题。我认为这是一个值得考虑的问题。去吧为了它!
@(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>
➜  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>