是否有一个带有条件指令的JavaScript小程序

Is there a JavaScript minifier with conditional directives?

本文关键字:JavaScript 程序 指令 有一个 有条件 是否      更新时间:2023-09-26

我正在寻找一个JavaScript迷你器,它将有一些类似于条件编译指令的支持。

例如,最初的JavaScript代码可能像这样:
//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif

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

是否有任何迷你器支持这种行为?

通过C预处理器运行代码,然后通过minifier运行输出。C预处理器除了对字符串字面值的处理之外,并不是真正特定于C的。

的例子:

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

where 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部分,所以我没有实际测试这个命令行。)

根据对类似问题的回答,我研究了C预处理器和其他一些竞争者。然后找到了我认为目前为止最好的答案——PHP。考虑:

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

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

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

4) PHP是图灵完备的,不像其他的预处理器。

你只需要基本的PHP知识就能受益匪浅。

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

但最重要的是,它很奇怪,很酷。感谢给我这个主意的人——我现在找不到他们的帖子了。