開源的多行字符串工具: 在JS中整段地寫HTML


這樣看來ES6的多行字符模板可能就不需要了……


通過這個你可以整段整段地在JS中寫HTML、SQL了。

示例


之前你得這樣寫

var str = '' +
'<!doctype html>' +
'<html>' +
'   <body>' +
'       <h1>❤ unicorns</h1>' +
'   </body>' +
'</html>' +
'';

寫起來太復雜

或者這樣寫

var str = '\
<!doctype html>\
<html>\
   <body>\
       <h1>❤ unicorns</h1> \
   </body> \
</html>';

限制很多,你不能使用Windows的換行符,"\" 必須在最后;


現在你可以這樣寫

var str = multiline(function(){/*
<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>
*/});

原理


非常簡單:
  1. 在一個function中寫上一段多行注釋
  2. 將此function toString()
  3. 將多行注釋內容用正則匹配出來

如下所示:

var str = (function(){/*
<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>
*/});
str.toString().match(/\/\*!?(?:\@preserve)?[ \t]*(?:\r\n|\n)([\s\S]*?)(?:\r\n|\n)\s*\*\//);

整個源碼壓縮后可能不足1K。

防壓縮?


注釋被壓縮工具去掉了怎么辦?

  • uglify: 使用 /*@preserve 代替 /* 即可
  • Closure Compiler(Google): 使用 /*@preserve 代替 /*
  • YUI Compressor: 使用 /*! 代替 /*


所以最終版本是這個樣子的:

var str = multiline(function(){/*!@preserve
<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>
*/console.log});



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM