Wpis ten poświęcę bardzo ważnej kwestii, a mianowicie dobremu przygotowaniu do tworzenia projektu.   Coś na co nie trafiłem na początku mojej przygody  z programowaniem, i co myślę dla takiego samouka jak ja bardzo by się przydało.

 

Ważna uwaga : proszę nie traktować jako kursu ( wiem że czasami może być mało czytelny) , wpis ten raczej służy jako odnośnik dla mnie.  A  może stać się inspiracją dla innych ” np ja żałuje że wcześniej nie natknąłem się na taki wpis” . W miarę możliwości i czasu postaram się materiał dopracować i dalej rozwijać.  ( razie pytań proszę o komentarz na dole [icon name=”arrow-down” class=”” unprefixed_class=””] )

Zalety dobrze przygotowanego  ” Workflow” :

  • pracujemy szybciej
  • nawet po kilku miesiącach przerwy nad projektem po powrocie bardzo szybko jesteśmy w stanie zorętować się gdzie skończyliśmy pracę, ewentualnie co należało by jeszcze poprawić
  • Jesteśmy w stanie szybko zlokalizować błędy i jej poprawić.
  • mamy lepszą kontrolę nad projektem.

 


Dobra od czego zaczynamy.

Wykaż narzędzi które nam będą potrzebne:

  • edytor tekstu notpad ++ , sublimetext ( ja używam sublime)
  • node.js
  • ruby
  • git
  • gulp

W folderze roboczym tworzę nowy katalog nazywam go „development”. W tym folderze będą znajdować się wszystkie moje pliki które będą w wersji developerskiej służyć, i nie idą do klienta.

W folderze development tworzę nowy folder o nazwie „sass”  znajdować się tu będą wszystkie pliki o foldery związane z sass jak jak sama nazwa wskazuje.

Ponieważ w tym przykładnie posługuje się szablonem dostarczonym przez Studio Presss  .   Muszę  podzielić na moduły i przerobić szablon css  na scss. ( szczegóły opiszę kiedyś później jak znajdę chwilę czasu 🙂 ).  Zaznaczę tylko że wy tym celu pomagam sobie następującą stroną = http://css2sass.herokuapp.com/.  Wszystkie przerobione moduły umieszczam w folderze „scss” wspomnianym wyżej.

 

 

1 . Uruchamiani kontrolę wersji  ( git )

Najpierw musimy zainstalować git. Wszystkie informacje można znaleźć pod adresem   https://git-scm.com/

2. Instalacja gulp GULP 

nodejs.org ”   ( po zainstalowaniu nodejs   w terminalu wpisujemy)

npm install gulp--g

g na końcu oznacza że instalujemy gulp globalnie  aby się upewnić czy mamy zainstalowany GULP w terminalu wpisuję

gulp -v

jeśli wyświetli się numer zainstalowanej wersji to znaczy że gulp jest zainstalowany.

3 Dobrze teraz przechodzę do utworzenia pakietu w moim projekcie 

npm init

Pakiet zostanie utworzony automatycznie , ale można go później też zmienić

  •  nazwa pakietu
  • nr wersji
  • auror
  • licencja

Wszędzie naciskamy enter  po czym na końcu wpisuję „YES” , po skończonym procesie w naszym projekcie pojawia się plik package.json ,

Następne co musimy zrobić to zainstalować „GULP” lokalnie

npm install gulp --save-dev

czekamy chwilę , na terminalu mogą się pojawić napisy ” Warning” ale tym nie ma co się przejmować

po zakończonym  procesie w folderze naszego projektu pojawia się nowy folder „node_modules” ( naprawdę sporo rzeczy w nim jest 🙂 )  wszystkie pliki które znajdują się w tym folderze nie  są wysyłane ani do klienta ani do GIT  dlatego należy się upewnić aby zaznaczyć je w pliku „.gitignore”

#Development Files
/node_modules
/assets/vendor

w powyższym przypadku zaznaczyłem foldery które chcę aby były ignorowane przez GIT.

Po skończeniu powyższych czynności w naszym pliku „package.json”  pojawi depedencies

w tym przypadku będzie to wpis

„gulp”:”^3.9.1″

Trick: jeśli znamy wersję pluginów jakie chcemy zainstalować wystarczy uzupełnić plik „package.json”  po czym w terminalu wpisać

npm install

i zainstalują się nam wszystkie zależności.

W przypadku instalacji każdej zależności po kolei wygląda to następująco.

Na początku instaluję sobie sass

npm install gulp-sass --save-dev

potem instaluję sobie bourbon

npm install --save-dev node-bourbon

później instaluję neat

npm intall --save-dev node-neat

Kolejny etap to tworzenie zadań  które GUPL będzie obsługiwał 

Zaczynam od utworzenia pliku ” gulp.file.js

po utworzeniu pliku  uwieramy go i zaczynamy uzupełniać plik po uzupełnieniu wygląda następująco

'use strict';

var gulp = require('gulp'),

	// Sass/CSS processes
	bourbon = require('bourbon').includePaths,
	neat = require('bourbon-neat').includePaths,
	sass = require('gulp-sass'),
	postcss = require('gulp-postcss'),
	autoprefixer = require('autoprefixer'),
	sourcemaps = require('gulp-sourcemaps'),
	cssMinify = require('gulp-cssnano'),
	sassLint = require('gulp-sass-lint'),

	// Utilities
	rename = require('gulp-rename'),
	notify = require('gulp-notify'),
	plumber = require('gulp-plumber'),
	connect = require('gulp-connect')

/*************
 * Utilities
 ************/

/**
 * Error handling
 *
 * @function
 */
function handleErrors() {
	var args = Array.prototype.slice.call(arguments);

	notify.onError({
		title: 'Task Failed [<%= error.message %>',
		message: 'See console.',
		sound: 'Sosumi' // See: https://github.com/mikaelbr/node-notifier#all-notification-options-with-their-defaults
	}).apply(this, args);

	gutil.beep(); // Beep 'sosumi' again

	// Prevent the 'watch' task from stopping
	this.emit('end');
}


/*************
 * CSS Tasks
 ************/

/**
 * PostCSS Task Handler
 */
gulp.task('postcss', function(){

	return gulp.src('assets/sass/style.scss')

           // Error handling
           .pipe(plumber({
                errorHandler: handleErrors
           }))

	           // Wrap tasks in a sourcemap
			.pipe( sourcemaps.init())

			.pipe( sass({
				includePaths: [].concat( bourbon, neat ),
				errLogToConsole: true,
				outputStyle: 'expanded' // Options: nested, expanded, compact, compressed
			}))

		   .pipe( postcss([
			   autoprefixer({
				   browsers: ['last 2 versions']
			   })
		   ]))

			// creates the sourcemap
			.pipe(sourcemaps.write())

			.pipe(gulp.dest('../'));

});

gulp.task('css:minify', ['postcss'], function() {
	return gulp.src('../style.css')
       // Error handling
       .pipe(plumber({
           errorHandler: handleErrors
       }))

		.pipe( cssMinify({
			safe: true
		}))
       .pipe(rename('style.min.css'))
       .pipe(gulp.dest('../'))
       .pipe(notify({
			message: 'Styles are built.'
		}))
	
});

gulp.task('sass:lint', ['css:minify'], function() {
	gulp.src([
		'assets/sass/style.scss',
		'!assets/sass/base/html5-reset/_normalize.scss',
		'!assets/sass/utilities/animate/**/*.*'
	])
		.pipe(sassLint())
		.pipe(sassLint.format())
		.pipe(sassLint.failOnError())
});


/********************
 * All Tasks Listeners
 *******************/

gulp.task('watch', function () {
	gulp.watch('assets/sass/**/*.scss', ['styles']) .on('change', browserSync.reload);
  gulp.watch(['../*.php']).on('change', browserSync.reload);
  gulp.watch(['../*.js']).on('change', browserSync.reload);
});




/**
 * Individual tasks.
 */
// gulp.task('scripts', [''])
gulp.task('styles', ['sass:lint'] );


var gulp        = require('gulp');
var browserSync = require('browser-sync').create();


gulp.task('browser-sync', function() {
    browserSync.init({
        proxy: "http://localhost/intellegro/"
    });
});

gulp.task('default', ['browser-sync', 'watch', 'css:minify','sass:lint']);