我正在寻找一种JavaScript缩小器,它会对conditional compilation directives类似的东西提供某种支持。
例如,原始的JavaScript代码可能看起来像这样:
//#if Dev
showLoginScreen();
//#else
login("DevUser", "qwerty1");
//#endif
因此原始代码可以包含指令#define Dev
,但一旦投入生产,#define Dev
将被删除,并且minifier将从其输出中排除行login("DevUser", "qwerty1");
。
任何缩小器是否都支持这种行为?
答案 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的文档/教程/论坛比其他预处理器更多。
但大多数情况下,这很奇怪,很酷。感谢无论谁给了我这个想法 - 我现在无法找到他们的帖子。