是否有带有条件指令的JavaScript缩小器?
作者:互联网
我正在寻找一个JavaScript缩小器,它将对类似于conditional compilation directives的东西提供某种支持.
例如,原始JavaScript代码可能看起来像这样:
//#if Dev
showLoginScreen();
//#else
login("DevUser", "qwerty1");
//#endif
所以原始代码可以包含一个指令#define Dev,但是一旦进入生产阶段就会删除#define Dev,并且minifier会排除行登录(“DevUser”,“qwerty1”);从它的输出.
任何缩小器是否支持这种行为?
解决方法:
只需通过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部分,所以我实际上没有测试过这个命令行.)
标签:conditional-compilation,javascript,minify 来源: https://codeday.me/bug/20190723/1515255.html