Как справиться со всем процессом минификации/углифации

У меня есть приложение AngularJS, которое я должен развернуть, и я обнаружил, что лучше минимизировать/изолировать мой файл javascript для производства.

Я нашел другой способ испортить мои файлы, например, grunt.

Но что-то я не понимаю...

Я минимизирую/изолирую эти файлы, тогда у меня будет определенная папка для этих «производственных» файлов. ОК

Затем :

  1. Как мне использовать их в моем index.html ?
  2. Как мне переключиться с dev на prod?
  3. Какой должна быть структура папки моего сайта? Должен ли я по-прежнему содержать неугловые файлы?

person Weedoze    schedule 11.08.2016    source источник


Ответы (2)


Так что я могу объяснить это вам, используя gulp вместо ворчания.

Как мне использовать их в моем index.html?

Вы можете поместить файлы JS и CSS в свой html. В html мы можем указать комментарии, говорящие, какие файлы должны быть скомпилированы вместе с файлом назначения, используя Bower.

Например:-

<!-- build:css styles/vendor.css -->
  <!-- bower:css -->
  <link rel="stylesheet" href="/bower_components/angular-material/angular-material.css" />
  <link rel="stylesheet" href="/bower_components/angular-ui-router-anim-in-out/css/anim-in-out.css" />
  <link rel="stylesheet" href="/bower_components/video.js/dist/video-js.css" />
  <link rel="stylesheet" href="/bower_components/angular-tooltips/dist/angular-tooltips.min.css" />
  <link rel="stylesheet" href="/bower_components/nvd3/build/nv.d3.css" />
  <!-- endbower -->
  <!-- endbuild -->

Теперь, если вы видите, что приведенные выше файлы css компилируются в vendor.css, когда вы запускаете скрипт gulp. Теперь в gulp-скрипте вы можете указать возможность укрупнения и минимизации.

Точно так же вы можете поместить файлы js. Вот как происходит углифация и минификация.

gulp.src('app/*.html')
    .pipe(assets)
    .pipe($.if('*.js', $.uglify()))
    .pipe($.if('*.css', $.minifyCss({
      compatibility: '*'
    })))

Если вы uglify/minify теперь, ваш index.html имеет следующее: -

  <link rel="stylesheet" href="/styles/vendors.css" />

Как мне переключиться с разработки на рабочую версию?

Вы можете сохранить вложенный файл JSON и создать отдельные элементы для dev, prod и local, сохранить здесь необходимые настройки и использовать их в gulp при компиляции проекта.

{
  "dev": {
   //required keys
   },
  "prod" :{
  //required keys
}

Какой должна быть структура папки моего веб-сайта? Должен ли я по-прежнему содержать неизображенные файлы?

Структура вашего сайта может быть такой:

  • app
    • scripts
    • стили
    • шрифты
    • index.html
  • Bower.json
  • gulpfile.js
person Harkirat Saluja    schedule 11.08.2016
comment
index.html будет автоматически переключаться с минифицированных/углифицированных файлов на обычные файлы? - person Weedoze; 11.08.2016
comment
Да, зависит от окружения. Если вы работаете локально, то все ваши обычные файлы будут там, в производстве, если конкретная опция uglify/minify ваши файлы будут скомпилированы, минимизированы и помещены в один файл. - person Harkirat Saluja; 11.08.2016
comment
Но как будут обрабатываться ссылки в index.html? Как он узнает, когда ссылаться на один файл или когда ссылаться на все файлы? - person Weedoze; 11.08.2016
comment
Я возьму пример CSS, чтобы объяснить это. Когда вы uglify/minify с помощью gulp, все файлы css компилируются в один файл css. Таким образом, технически ваш html теперь содержит только один файл CSS. Я обновлю ответ, чтобы сделать его более понятным. - person Harkirat Saluja; 11.08.2016
comment
Теперь это более ясно, но я все еще застрял в index.html... После минимизации/углификации я не могу вернуться ко всем ссылкам? Легче для отладки и разработки - person Weedoze; 11.08.2016
comment
Это делается только на производственном сервере, на локальном вы обычно серверируете файлы. - person Harkirat Saluja; 11.08.2016
comment
Okok Я думаю, что я начинаю понимать! Я постараюсь использовать это в своих будущих проектах! Большое спасибо за то, что сделали это яснее - person Weedoze; 11.08.2016
comment
На самом деле вы не решаете проблему Weedoze. Я думаю, вопрос в том, как вы можете переключиться с: ‹link rel=stylesheet href=/bower_components/nvd3/build/nv.d3.css /› на производственный index.html: ‹link rel=stylesheet href=/styles/ вендоры.css /› - person ZanattMan; 13.09.2016
comment
@ZanattMan я думаю, что да .. Gulp делает это .. пожалуйста, прочитайте ответ еще раз :) - person Harkirat Saluja; 13.09.2016

другой способ - использовать плагин gulp-useref, помещая комментарии внутри html-файла, чтобы пометить все js-файлы и назвать полученный пакет.

в html файле

<!-- build:js bundle.js -->
<script src="js/jsfile1.js" ></script>
<script src="js/jsfile2.js" ></script>
<script src="js/jsfile3.js" ></script>
<!-- endbuild -->

в gulpfile.js

gulp.task('build', function(){
   gulp.src('app/*.html')
   .pipe(useref())
   .pipe(gulpIf('*.js', uglify()))
   .pipe(gulp.dest('build'));
});

это приведет к созданию одного мини-файла js bundle.js с соответствующей ссылкой в ​​html-файле.

person Mohamed Ali    schedule 05.04.2017