Création d’outils d’automatisation pour les thèmes personnalisés (Gulpjs)
L’utilisation d’outils d’automatisation simplifie la création de thèmes. Ici, nous allons utiliser gulp js pour créer un outil d’automatisation pour un thème personnalisé.
Travail avec Gulp 3.x et Node 10.x et versions inférieures
Étapes :
1. Installation de Node.js
Téléchargez et installez la dernière version de NodeJS depuis le site nodejs.org. Le processus d’installation peut varier selon votre système d’exploitation.
2. Installer Gulp
npm install gulp-cli -g
3. Configurer gulpfile.js
Allez dans le répertoire de votre thème personnalisé.
Créez manuellement un fichier gulpfile.js en utilisant cmd/terminal ou clic droit pour créer un nouveau fichier.
touch gulpfile.js
Copiez et collez le code complet suivant :
Note : j’ai placé mes fichiers sources dans un dossier 'src', et les fichiers compilés dans le dossier racine du thème personnalisé. Donc, lorsque les fichiers sass sont compilés depuis « my_custom_theme_folder/src/scss », ils sont compilés et placés dans « my_custom_theme_folder/css ».
var gulp = require('gulp'), livereload = require('gulp-livereload'), gulpIf = require('gulp-if'), eslint = require('gulp-eslint'), sass = require('gulp-sass'), autoprefixer = require('gulp-autoprefixer'), sourcemaps = require('gulp-sourcemaps'), imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'); gulp.task('imagemin', function () { return gulp.src('./src/images/*') .pipe(imagemin({ progressive: true, svgoPlugins: [{removeViewBox: false}], use: [pngquant()] })) .pipe(gulp.dest('./images')); }); gulp.task('sass', function () { gulp.src('./src/sass/**/*.scss') .pipe(sourcemaps.init()) .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) .pipe(autoprefixer('last 2 version')) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('./css')); }); function isFixed(file) { // Le fichier a-t-il été corrigé par ESLint ? return file.eslint != null && file.eslint.fixed; } gulp.task('eslint', function(){ gulp.src(['./src/js/*.js']) .pipe(eslint({ "extends": "eslint:recommended", "env": { "browser": true }, "globals": { "Drupal": true, "drupalSettings": true, "drupalTranslations": true, "domready": true, "jQuery": true, "_": true, "matchMedia": true, "Backbone": true, "Modernizr": true, "CKEDITOR": true }, "rules": { // Erreurs. "array-bracket-spacing": [2, "never"], "block-scoped-var": 2, "brace-style": [2, "stroustrup", {"allowSingleLine": true}], "comma-dangle": [2, "never"], "comma-spacing": 2, "comma-style": [2, "last"], "computed-property-spacing": [2, "never"], "curly": [2, "all"], "eol-last": 2, "eqeqeq": [2, "smart"], "guard-for-in": 2, "indent": [2, 2, {"SwitchCase": 1}], "key-spacing": [2, {"beforeColon": false, "afterColon": true}], "linebreak-style": [2, "unix"], "lines-around-comment": [2, {"beforeBlockComment": true, "afterBlockComment": false}], "new-parens": 2, "no-array-constructor": 2, "no-caller": 2, "no-catch-shadow": 2, "no-empty-label": 2, "no-eval": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-extra-parens": [2, "functions"], "no-implied-eval": 2, "no-iterator": 2, "no-label-var": 2, "no-labels": 2, "no-lone-blocks": 2, "no-loop-func": 2, "no-multi-spaces": 2, "no-multi-str": 2, "no-native-reassign": 2, "no-nested-ternary": 2, "no-new-func": 2, "no-new-object": 2, "no-new-wrappers": 2, "no-octal-escape": 2, "no-process-exit": 2, "no-proto": 2, "no-return-assign": 2, "no-script-url": 2, "no-sequences": 2, "no-shadow-restricted-names": 2, "no-spaced-func": 2, "no-trailing-spaces": 2, "no-undef-init": 2, "no-undefined": 2, "no-unused-expressions": 2, "no-unused-vars": [2, {"vars": "all", "args": "none"}], "no-with": 2, "object-curly-spacing": [2, "never"], "one-var": [2, "never"], "quote-props": [2, "consistent-as-needed"], "semi": [2, "always"], "semi-spacing": [2, {"before": false, "after": true}], "space-after-keywords": [2, "always"], "space-before-blocks": [2, "always"], "space-before-function-paren": [2, {"anonymous": "always", "named": "never"}], "space-in-parens": [2, "never"], "space-infix-ops": 2, "space-return-throw-case": 2, "space-unary-ops": [2, { "words": true, "nonwords": false }], "spaced-comment": [2, "always"], "strict": 2, "yoda": [2, "never"], // Avertissements. "max-nested-callbacks": [1, 3], "valid-jsdoc": [1, { "prefer": { "returns": "return", "property": "prop" }, "requireReturn": false }] }, fix: true, })) .pipe(eslint.format()) // si corrigé, écrire le fichier .pipe(gulpIf(isFixed, gulp.dest('./js/')));; }); gulp.task('watch', function(){ livereload.listen(); gulp.watch('./src/sass/**/*.scss', ['sass']); gulp.watch('./src/js/**/*.js', ['eslint']); gulp.watch(['./css/style.css', './**/*.html.twig', './js/*.js'], function (files){ livereload.changed(files) }); });
4. Configurer le gestionnaire de paquets
Tapez npm init dans votre terminal depuis le dossier du thème personnalisé et remplissez les informations demandées pour créer package.json.
5. Installer les dépendances
Tapez npm install --save-dev <nom_du_package> dans le terminal depuis le dossier du thème personnalisé. Cela téléchargera gulp et les dépendances associées et créera le dossier 'node_modules'.
6. Lancer l’outil d’automatisation depuis cmd/terminal.
Vous êtes maintenant prêt à lancer l’outil d’automatisation gulp.
Tapez gulp watch.