开源的多行字符串工具: 在JS中整段地写HTML
jopen 10年前
这样看来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});