2015-07-12 36 views
1

在建设我玩2.3的应用程序(SBT 0.13.5)使用命令“激活阶段”,我发现了错误:路径回退不优化(“重装”)的支持

Optimizing JavaScript with RequireJS 
Error: Error: paths fallback not supported in optimizer. Please provide a build config path override for angular-easyfb 

build.sbt:

... 
"org.webjars.bower" % "angular-easyfb" % "1.3.1" 

main.js:

shim: { 
    'angular': { 
     deps: ['jquery'], 
     exports: 'angular' 
    }, 
    ... 
    'angular-easyfb': ['angular'] 
}, 
paths: { 
    ... 
    'angular': ['../lib/angularjs/angular'], 
    'angular-easyfb': ['../lib/angular-easyfb/angular-easyfb'], 
    ... 
}}); 

在开发模式下,一切工作正常。即使在生产模式下(例如,“org.webjars”%“angular-elastic”%“2.4.2”),我的其他基于webjar的js-libs也能正常运行。

Google和SO为我提供了很多“优化器不支持路径回退”的结果。 似乎有些人找到了解决方案,但其他人却没有。

我如何(作为Java和Javascript的家伙)系统地分析问题是什么?

回答

1

就以这个帖子一看:How to use RequireJS optimizer in Play framework?

It turns out that RequireJS optimization support does not apply to all Webjars, but rather limited to Classic Webjars.

有一些解释。如果你看看http://mvnrepository.com/artifact/org.webjars.bower/angular-easyfb/1.3.1和它的jar文件,你就不会在里面看到任何webjars-requirejs.js。所以这是你的情况,默认情况下,webjar与requirejs不兼容。

这里是另一件事:

Remember to have square brackets, otherwise CDN replacement will not happen. For the non-requirejs ready scripts, you should not have square brackets when declaring the paths. Otherwise, rjs will refuse to build with error path fallback not supported.

所以尝试从路径删除方括号:

'angular-easyfb': '../lib/angular-easyfb/angular-easyfb', 
+0

另一种方式来解决它是编辑build.sbt 'RjsKeys.paths + = (“angular-easyfb” - >(“../lib/angular-easyfb/angular-easyfb” - >“[某些CDN网址在这里]”))' – MipH

+0

好的,但现在什么解决方案是首选?图书馆或优化过程有什么不同或有其他影响? – icl7126

+1

@ icl7126这取决于您在项目中如何使用RJS。例如:'pipelineStages:= Seq(rjs,digest,gzip)' - 对于这种情况,RJS会将所有LOCAL js文件(不包含在main.js中的方形文件夹中)压缩到一个main.js并发送用户gziped和正确的缓存/摘要头(缓存策略)。 但是所有CDN文件(它们在main.js中的方形文件夹中)将与公共CDN服务器分开加载,而不会受到RJS(较少请求到服务器)的影响。 – MipH