Багаторядковість в JavaScript

03 серпня 2014 23:36 comandante 258 0

До

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

 

Після

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

 

ЯК

Це працює за допомогою обертання тексту в блоці коментаря, анонімної функції і виклику функції. Анонімна функція передається у виклику функції і зміст коментаря вилучається.

Не дивлячись на те, що це працює повільніше ніж рядковий Concat, зручність завжди важливіша мікро-продуктивності.

Інсталювання

$ npm install --save multiline
 
GitHub

Використання

Все, від першого рядка  до останнього, буде повернене, як показано нижче:

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

На виході:

<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>

 

Смуга відступу

Ви можете використовувати multiline.stripIndent()щоб зробити багатостроковий відступ без збереження надлишкових пропусків.

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

На виході:

<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>

 

Заміна рядків

console.log() підтримує string substitution:

var str = 'unicorns';
console.log(multiline(function(){/*
  I love %s
*/}), str);
//=> I love unicorns

 

FAQ

Але в JS вже є багатостроковий текст з \?

var str = 'foo\
bar';

Це не багаторядковість. Це лінія-продовження. Вона не зберігає нові рядки.

Ви повинні зробити наступне:

var str = 'foo\n\
bar';

Але тоді ви могли б виконати об'єднання так:

var str = 'foo\n' +
'bar';

Зверніть увагу, що ES6 матиме реальний багатостроковий текст.

 

Браузер

У той час як це гарно працює в браузері, воно в основному призначене для використання в Node.js. Використовуйте на свій страх і ризик.

Інсталювання

$ bower install --save multiline
 component install sindresorhus/multiline

 

Сумісність

  • Найновіший Chrome
  • Firefox >=17
  • Safari >=4
  • Opera >=9
  • Internet Explorer >=6

 

Мініфікація

Не дивлячись на те, що коментарі прибрані за замовчуванням, є способи, щоб зберегти їх:

  • Спотворювання: Використовувати /*@preserve замість /* та задіяти функцію коментування
  • Компілятор закриття: Використовувати /*@preserve замість /*
  • YUI компресор: Використовувати /*! instead of /*

Крім того, необхідно додати console.log після коментаря, щоб він не видалявся як мертвого код.

Кінцевий результат буде виглядати так:

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

 

258 2

Схожі матеріали:

Коментарі:

Авторизуйтесь, щоб залишити коментар.