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

Ric*_*uen 3 javascript conditional-compilation minify

我正在寻找一种JavaScript缩小器,它将对类似于条件编译指令的东西提供某种支持.

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

//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif
Run Code Online (Sandbox Code Playgroud)

所以原始代码可以包含一个指令#define Dev但是一旦它进入生产#define Dev就会被删除,并且minifier login("DevUser", "qwerty1");将从它的输出中排除该行.

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

Jer*_*man 9

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

例:

cpp -DDev file.js /dev/stdout | jsmin > file-min.js
Run Code Online (Sandbox Code Playgroud)

其中file.js是:

#if Dev
    showLoginScreen();
#else
    login("DevUser", "qwerty1");
#endif
Run Code Online (Sandbox Code Playgroud)

将包括Dev代码然后缩小它.

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

//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif
Run Code Online (Sandbox Code Playgroud)

然后像这样处理它:

sed 's!^//#!#!' file.js | cpp -DDev /dev/stdin /dev/stdout | jsmin > file-min.js
Run Code Online (Sandbox Code Playgroud)

sed部分用于//从开头的线开始剥离前导//#.cpp然后预处理源为正常,并从输出cpp通过被供给jsmin用于缩小率.

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

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