是否有带有条件指令的JavaScript缩小器?

时间:2011-08-25 19:49:29

标签: javascript minify conditional-compilation

我正在寻找一种JavaScript缩小器,它会对conditional compilation directives类似的东西提供某种支持。

例如,原始的JavaScript代码可能看起来像这样:

//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif

因此原始代码可以包含指令#define Dev,但一旦投入生产,#define Dev将被删除,并且minifier将从其输出中排除行login("DevUser", "qwerty1");

任何缩小器是否都支持这种行为?

2 个答案:

答案 0 :(得分:9)

只需通过C预处理器运行代码,然后通过minifier运行该输出。除了处理字符串文字之外,C预处理器并不是特定于C的。

示例:

cpp -DDev file.js /dev/stdout | jsmin > file-min.js

其中file.js是:

#if Dev
    showLoginScreen();
#else
    login("DevUser", "qwerty1");
#endif

将包含Dev代码然后缩小它。

为了使原始源代码可执行,您可以向处理管道添加一个步骤。写下你的代码:

//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif

然后像这样处理:

sed 's!^//#!#!' file.js | cpp -DDev /dev/stdin /dev/stdout | jsmin > file-min.js

sed部分用于从//开头的行中删除前导//#cpp然后正常预处理来源,cpp的输出通过jsmin输入以进行缩小。

更好的解决方案可能只是像C程序员那样做,并且在运行之前总是适当地预处理源文件。您可以编辑.jspp(“预处理JavaScript”)文件,并将系统设置为在进行更改时适当地进行预处理以进行开发或部署。如果您经常使用测试,则可以在测试工具的调用中进行预处理。

(注意:命令行可能已关闭;我从联机帮助页中找到了cpp部分,从jsmin.c源代码文件中找到了jsmin部分,所以我实际上没有测试过这个命令行。)

答案 1 :(得分:0)

我根据类似问题的答案查看了C预处理器和其他一些竞争者。然后找到了我认为迄今为止最好的答案 - PHP。考虑:

1)PHP确实是一个预处理器(它是首字母缩略词)。

2)PHP已准备好在大多数服务器上运行。您所要做的就是从" .js"更改文件扩展名。 to" .php"或" .js.php"或(我的偏好),对配置文件进行简单编辑(您可以在其他地方找到详细信息)。

3)许多JavaScript开发人员已经熟悉或熟悉PHP。

4)与许多其他预处理器不同,PHP是图灵完备的。

5)您只需要基本的PHP知识就可以获益良多。

6)PHP的文档/教程/论坛比其他预处理器更多。

但大多数情况下,这很奇怪,很酷。感谢无论谁给了我这个想法 - 我现在无法找到他们的帖子。