【问题标题】:Paths fallback not supported in optimizer ("reloaded")优化器不支持路径回退(“重新加载”)
【发布时间】:2015-07-12 13:00:09
【问题描述】:

在使用命令“activator stage”构建我的 Play 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'],
     ...
}});

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

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

我(作为 Java 和 Javascript 人)如何系统地分析问题所在?

【问题讨论】:

    标签: javascript requirejs sbt playframework-2.3 webjars


    【解决方案1】:

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

    事实证明,RequireJS 优化支持并不适用于所有 Webjar,而是仅限于 Classic Webjar。

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

    还有一件事:

    记得有方括号,否则不会发生CDN替换。 对于非 requirejs 就绪的脚本,在声明路径时不应使用方括号。否则,rjs 将拒绝构建错误路径回退不支持。

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

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

    【讨论】:

    • 另一种修复方法是编辑 build.sbt RjsKeys.paths += ("angular-easyfb" -> ("../lib/angular-easyfb/angular-easyfb" -> "[some CDN url here]"))
    • 好的,但现在首选的解决方案是什么?有什么区别或对库或优化过程有什么其他影响?
    • @icl7126 这取决于您在项目中使用 RJS 的方式。例如:pipelineStages := Seq(rjs, digest, gzip) - 在这种情况下,RJS 将获取您所有的 LOCAL js 文件(不在 main.js 中的方括号中),将它们压缩为一个 main.js 并发送给用户 gzip 并带有正确的缓存/摘要标头(缓存策略)。但是所有 CDN 文件(在 main.js 中的方括号中)都将从公共 CDN 服务器中单独加载,而不受 RJS 的影响(对您的服务器的请求较少)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多