play框架和requirejs开发javascript代码

play框架和requirejs开发javascript代码,javascript,scala,requirejs,playframework-2.2,Javascript,Scala,Requirejs,Playframework 2.2,我正在使用requirejs在Play2.2框架上构建前端。play为这种情况提供了巨大的开发/阶段代码差异。在devel模式下,我使用基于浏览器的requirejs,在阶段中,我使用预编译的r.js版本的项目。但有一个功能失败了——是否可以在javascript方面区分它是否为开发模式,并在编译过程中删除部分代码或类似的内容: #ifdef DEVELOPMENT code in Development only #endif 默认情况下,r.js使用UglifyJS优化您的模块。在r.js

我正在使用requirejs在Play2.2框架上构建前端。play为这种情况提供了巨大的开发/阶段代码差异。在devel模式下,我使用基于浏览器的requirejs,在阶段中,我使用预编译的r.js版本的项目。但有一个功能失败了——是否可以在javascript方面区分它是否为开发模式,并在编译过程中删除部分代码或类似的内容:

#ifdef DEVELOPMENT
code in Development only
#endif

默认情况下,
r.js
使用UglifyJS优化您的模块。在
r.js
”配置中,您可以使用
uglify
选项将配置选项发送到UglifyJS。比如说,

uglify: {
    defines: {
        DEV: ['name', 'false']
    }
},
这将告诉
uglifyjs
用名称
false
替换符号
DEV
的每个实例。然后,像这样的部分:

if (DEV) {
    // ....
}
将被
uglifyjs
自动删除为无法访问

有关如何工作的详细信息,请参阅


您可能还想看看,因为它可能不仅仅是丑陋的JS。您可以通过将
optimize
选项设置为
uglify2
,告诉
r.js
使用它,并使用
uglify2
选项控制它的功能。

sbt rjs 1.0.7中的UglifyJS2已经有一些其他有用的选项:


它将从缩小的脚本中删除所有console.log消息。

javascript代码不会在服务器端运行。。。根据开发模式的不同,您可以在页面生成过程中包含不同版本的脚本,因为workaround.r.js编译器在stageing过程中在服务器端运行并生成一个javascript文件
uglify: {
     drop_console: true
}
uglify2: {
     compress: { drop_console: true }
}