在 Play 2.3. x 应用程序中使用 sbt-rjs 优化 WebJars 中的 JS

有没有可能有一个 Play 2.3应用连接/优化 JS (使用 sbt-rjs) ,包含在我的应用程序通过 WebJars?给出一个具体的例子: 我试图创建一个 CoreJs模块,它包含了我的所有第三方库连接和缩小到一个文件中,然后可以指定为其他 AMD 模块的依赖项。如果能够通过 WebJars 包含这些库,而不是“手动”下载源代码,那就太好了。

下面是我的 搭建文件中的一个片段,其中我指定了我的 webjar 依赖项:

// Webjars
libraryDependencies ++= Seq(
"org.webjars" % "requirejs" % "2.1.15",
"org.webjars" % "underscorejs" % "1.7.0",
"org.webjars" % "jquery" % "1.11.1",
"org.webjars" % "bootstrap" % "3.3.1" exclude("org.webjars", "jquery"),
"org.webjars" % "angularjs" % "1.3.4-1" exclude("org.webjars", "jquery")
)

下面是我需要的 JS 构建配置

requirejs.config({
baseUrl: '/assets/javascripts',
shim: {
'jsRoutes': {
deps: [],
exports: 'jsRoutes'
},
'angular': {
deps: ['jquery'],
exports: 'angular'
},
'underscore': {
exports: '_'
},
'angularRoute': ['angular'],
'angularCookies': ['angular'],
'bootstrap': ['jquery']
},
paths: {
'requirejs': '../lib/requirejs/require',
'jquery': '../lib/jquery/jquery',
'underscore': '../lib/underscorejs/underscore',
'angular': '../lib/angularjs/angular',
'angularRoute': '../lib/angularjs/angular-route',
'angularCookies': '../lib/angularjs/angular-cookies',
'bootstrap': '../lib/bootstrap/js/bootstrap',
'jsRoutes': '/jsroutes',
'core': './core'
},
modules: [
{
name: 'core'
}
]
});

最后,这是我的 CoreJs模块:

define(['angular', 'angularRoute', 'underscore', 'bootstrap'], function() {
// core dependencies are loaded...
});

在从命令行运行 activator clean stage之后,我希望构建的 CoreJs文件将包含所有指定的依赖项,并将其连接和缩小到一个文件中,但是它不包含任何依赖项。如果我指定一个非 WebJar 文件作为 CoreJs的依赖项,它会正确地优化它。

我想做的事有可能吗?我在谷歌上搜索了很久,还是没能找到一个明确的答案。

谢谢!

1982 次浏览

我正在使用 Play2.4.3。

在 plugins.sbt 中增加了 addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")

// rjs = RequireJS, uglifies, shrinks to one file, replaces WebJars with CDN
client accepts them
pipelineStages := Seq(rjs, digest, gzip)

这在我的 build.sbt 中做了所有的收缩工作等,以保护 JS 和 webjar。