如广告所示,Play中的rjs可以



但是,我似乎无法使其中任何一个起作用。

  • 我尝试在生产模式下运行我的Play应用,但我所有的webjar javascript仍被引用为本地。
  • 我看不到生产中使用的javascript文件的.min版本。
  • 我无法使依赖项注入(inject)在生产模式下工作。例如,当我想像这样在我的代码中注入(inject)jquery

    define(['jquery'],function($){
    “使用严格”;
    console.log($。grep);
    返回 {
    sum:函数(a,b){
    返回a + b;
    }
    };
    });

  • 我可以在开发人员模式下使其正常工作,但是在生产模式下,rjs失败说
    [info] Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js'
    [info] In module tree:
    [info]     main
    [info]       app
    [info]
    [info] Error: Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js'
    [info] In module tree:
    [info]     main
    [info]       app
    [info]
    [info]     at Error (native)
    

    显然,尽管Webjar生成了配置设置,但它查找的是jQuery的错误位置
    requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]})    }
    

    具有正确的jquery位置。

    我正在使用build 2.sbt中带有pipelineStages := Seq(rjs, digest)设置的Play 2.4.0。

    请让我知道我在哪里弄错了。

    谢谢!

    最佳答案

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

    即使这样,常规模块也必须包含一个webjar构建文件,以使rjs正常工作。

    例如,如果您查看jQuery经典的webjar,您会发现其中包含特殊的webjar构建说明。查看该文件以供引用。

    一旦确定了准备好RequireJS的webjar,就可以让sbt-rjs完成它。这是我的设置供引用:

    /** javascripts/main.js **/
    'use strict';
    
    requirejs.config({
        paths:{
            'jquery': ['../lib/jquery/jquery'],
            'react': ['../lib/react/react'],
            'bootstrap': ['../lib/bootstrap/js/bootstrap'],
            'react-bootstrap': ['../lib/react-bootstrap/react-bootstrap']
        },
        shim: {
            'bootstrap': {
                deps: ['jquery']
            },
            'react-bootstrap': {
                deps: ['react']
            }
        }
    });
    

    记住要有方括号,否则将不会替换CDN。

    对于非requirejs就绪的脚本,在声明paths时不应使用方括号。否则,rjs会拒绝生成错误path fallback not supported。当然,您不会获得CDN的好处。
    只是一点说明,RequireJS css优化也可以。但仅限于内联css,就像常规的Requirejs一样。

    09-28 04:49