Как заставить шаблон Jade автоматически сжимать встроенный JavaScript? - PullRequest
5 голосов
/ 11 августа 2011

когда я проверяю источник html-страницы, теги HTML и текстовое содержимое сжимаются без пробелов и строк, но с встроенным JavaScript.

Ответы [ 3 ]

5 голосов
/ 02 мая 2013

Только что обнаружил что-то, что работает для меня в Jade v0.30.0:

  1. Переименуйте файл .js с расширением .uglify
  2. В своем шаблоне Jade используйте:

    include name-of-javascript-file.uglify
    

Почему это работает: Копаясь в исходном коде Jade, я обнаружил файл с именем filters.js.Там вы увидите зависимость от transformerslib/transformers.js (модуля преобразователей) вы увидите различные утилиты преобразования, включая uglify.Очевидно, Jade вызовет любой из этих преобразователей, если вы укажете правильное расширение файла в вашей декларации include.

4 голосов
/ 12 августа 2011

Я не уверен в этом и еще не проверял, но вы можете, вероятно, добавить фильтр и использовать UglifyJS . Например

var uglyParser = require("uglify-js").parser;
var uglyUgly   = require("uglify-js").uglify;

var uglify = function(str) {
  var ast = uglyParser.parse(str);
  ast = uglyUgly.ast_mangle(ast);
  ast = uglyUgly.ast_squeeze(ast);
  return uglyUgly.gen_code(ast);
}

Если честно, я не уверен, куда поместить это в нефрит, так что это рассматривается как фильтр. На данный момент вы можете просто поставить его на https://github.com/visionmedia/jade/blob/master/lib/filters.js.

Тогда использование в нефрите будет:

script(type="text/javascript")
  :uglify
    <Your JavaScript Code>

Опять же, я не проверял это. Но я думаю, что это должно работать. Я проверю это позже сегодня.

2 голосов
/ 18 апреля 2016

Согласно документам , вы можете использовать любой JSTransformer в качестве нефритового фильтра. Итак, где вы обычно делаете это для встроенного JS:

script.
  (function doSomething () { … })();

вы должны сделать это так:

script
  :uglify-js
    (function doSomething () { … })();
...