Шаблон Gulp и система сборки.
Включает следующие инструменты, задачи и рабочие процессы:
<symbol>
и <use>
Ищете версию SilverStripe? Посмотрите здесь.
Gulp-plate зависит от следующих технологий:
[1] Рекомендуется устанавливать узел через nvm (менеджер версий узла).
Чтобы начать:
$ git clone https://github.com/arillo/gulp-plate myProject
$ cd myProject
$ rm -r .git # Remove the link to the git repo
$ yarn # Install dependencies
# Equivalent
$ yarn run build
Запустите задачу по умолчанию и создайте версию сайта для разработчиков в папке dist
.
# Equivalent
$ yarn start
$ yarn run watch
Запустите задачу по умолчанию один раз, запустите сервер и наблюдайте за изменениями файлов.
# Equivalent
$ yarn run prod
Установите NODE_ENV='production'
и создайте рабочую версию сайта, сжимая js, css и html. Это папка, которая должна находиться на сервере.
Если вы хотите запустить любую другую задачу gulp, просто добавьте имя задачи к команде build /gulp:
# Equivalent
$ yarn run build sprite
$ yarn run b sprite
$ yarn run gulp sprite
$ yarn run g sprite
Важный:
Каталог dist
будет удаляться каждый раз при запуске build/watch/prod. Не вносите никаких изменений в каталог dist
.
myProject/
gulpfile.js/ # gulp tasks
src/
icons/ # SVG files to be included in he the sprite
images/ # other images
js/ # js code
sass/ # Sass code, SCSS and Sass indented syntax possible
html/ # html templates
data/ # data in json format
layouts/ # reusable layout templates
macros/ # Nunjucks macros
shared/ # reusable snippets
Все пути и настройки плагина собраны в централизованный файл: ./gulpfile.js/config.js
. Адаптируйте пути и настройки к структуре и потребностям вашего проекта.
Спрайт создает изображение с именем sprite.svg
в ./dist/images/
. Он также создает файл Sass с именем: _sprite.scss
в ./src/sass/base/
.
Сгенерированные файлы Sass содержат полезную информацию о значках спрайтов, например, размеры каждого значка. Файл будет меняться каждый раз при добавлении, удалении или изменении значка, не редактируйте его вручную. Вы можете изменить файл, изменив шаблон в ./gulpfile.js/tpl/_sprite.scss
.
Чтобы переместить статические ресурсы из исходного каталога без преобразований, например файлы шрифтов. Добавьте пути src
и dest
в static
массив в config.js
Шаблоны используют Nunjucks. Дополнительную информацию о том, как их использовать, см. в документации.
По умолчанию используется синтаксис Sass с отступом. Основные файлы Sass должны иметь расширение .sass
, иначе компилятор выйдет из строя. Частичные файлы могут быть как .sass
, так и .scss
.
Чтобы включить сторонние стили в свой CSS, включите их в файл main.sass
:
// main.sass
@import url( ' ../../node_modules/normalize.css/normalize.css ' ) ;
Плагин postcss затем встроит файлы, сохраняя исходные карты. После компиляции Sass.
Помните, что Sass переместит операторы @import url(...)
в начало сгенерированного файла CSS, поэтому независимо от места включения эти стили всегда будут включаться в начало файла.
На момент написания sass-lint
дает сбой, когда обнаруживает пустые селекторы. Это ошибка, ее можно предотвратить, добавив комментарий с отступом //
после пустого селектора:
.mySelector
//
.mySelector_child
text-align : center
Файл ./gulpfile.js/config.js
содержит полную конфигурацию веб-пакета (см. переменную js
). Не стесняйтесь изменять по мере необходимости. Имейте в виду, что babel-loader
всегда должен присутствовать, поскольку eslint
будет полагаться на него.
Конфигурация будет немного изменена в зависимости от выполняемой вами задачи. При использовании задачи просмотра компиляция Javascript будет происходить в памяти, поэтому файлы не записываются на диск ( ./dist/js/
будет пустым), а webpack-hot-middleware/client
будет внедрен во все пакеты для работы оперативной перезагрузки. . При сборке для производства для минификации используется webpack.optimize.UglifyJsPlugin
. Взгляните на ./gulpfile.js/util/getWebpackConfig.js
чтобы точно увидеть, что происходит, и при необходимости измените его.
Вот несколько полезных рецептов, которые помогут вам начать работу:
// gulpfile.js/config.js
const js = {
resolve : {
extensions : [ '.js' ] ,
alias : {
// Path relative to `context`
myModule : './myModule/myModule.js' ,
} ,
} ,
} ;
// src/js/some-file.js
import myModule from 'myModule' ;
myModule ( ) ;
Документы: https://webpack.js.org/configuration/resolve/#resolve-alias.
// gulpfile.js/config.js
const webpack = require ( 'webpack' ) ;
//...
const js = {
plugins : [
// Make jQuery global, expected by the plugin.
new webpack . ProvidePlugin ( {
'window.jQuery' : 'jquery' ,
} ) ,
] ,
//...
resolve : {
// Add extensions to prevent linting errors.
extensions : [ '.js' , '.json' ] ,
// Path from `node_modules`, where `myModule` is the module name.
alias : {
myModule : 'myModule/dist/myModule.js' ,
} ,
} ,
} ;
// src/js/main.js
import $ from 'jquery' ;
import 'myModule' ;
$ ( '.js-selector' ) . myModule ( ) ;
// gulpfile.js/config.js
const js = {
//...
resolve : {
// Add extensions to prevent linting errors.
extensions : [ '.js' , '.json' ] ,
// Path from `node_modules`, where `myModule` is the module name.
alias : {
myModule : 'myModule/dist/myModule.js' ,
} ,
} ,
module : {
rules : [
// ...
{
include : require . resolve ( 'myModule/dist/myModule.js' ) ,
loader : 'exports-loader?MyModule' ,
} ,
] ,
} ,
} ;
// src/js/main.js
import $ from 'jquery' ;
import MyModule from 'myModule' ;
const myInstance = new MyModule ( ) ;
Документы: https://webpack.js.org/guides/shimming/.
Чтобы создать несколько пакетов, добавьте в entry
целые элементы.
// gulpfile.js/config.js
const js = {
// ...
entry : {
main : [ './main.js' ] ,
other : [ './someFile.js' , './sotherOtherFile.js' ] ,
} ,
// ...
} ;
Это создаст два пакета: main.js
other.js
.
Если вы сделаете это, вероятно, будет хорошей идеей создать еще один пакет, содержащий весь общий код поставщика:
// gulpfile.js/config.js
const webpack = require ( 'webpack' ) ;
//...
const js = {
// ...
entry : {
main : [ './main.js' ] ,
other : [ './someFile.js' , './sotherOtherFile.js' ] ,
// List vendor modules here:
vendor : [ 'jquery' , 'svg4everybody' ] ,
} ,
// ...
plugins : [
new webpack . optimize . CommonsChunkPlugin ( {
name : 'vendor' , // Specify the common bundle's name
} ) ,
] ,
// ...
} ;
Документы: https://webpack.js.org/guides/code-splitting-libraries/.
Gulp-plate основан на https://github.com/greypants/gulp-starter.