簡體   English   中英

是否有帶有條件指令的JavaScript縮小器?

[英]Is there a JavaScript minifier with conditional directives?

我正在尋找一種JavaScript縮小器,它將對類似於條件編譯指令的東西提供某種支持。

例如,原始JavaScript代碼可能看起來像這樣:

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

所以原始代碼可以包含一個指令#define Dev但是一旦進入生產階段就會刪除#define Dev ,並且minifier會排除行login("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部分,所以我實際上沒有測試過這個命令行。)

我根據類似問題的答案查看了C預處理器和其他一些競爭者。 然后找到了我認為迄今為止最好的答案 - PHP。 考慮:

1)PHP確實是一個預處理器(它是首字母縮略詞)。

2)PHP已准備好在大多數服務器上運行。 您所要做的就是將文件擴展名從“.js”更改為“.php”或“.js.php”,或者(我的偏好),對配置文件進行簡單編輯(您可以在其他地方找到詳細信息) )。

3)許多JavaScript開發人員已經熟悉或熟悉PHP。

4)與許多其他預處理器不同,PHP是圖靈完備的。

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

6)PHP的文檔/教程/論壇比其他預處理器更多。

但大多數情況下,這很酷,很酷。 感謝無論誰給我這個想法 - 我現在找不到他們的帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM