


Configuration pratique Gulp (2) - projets de petite et moyenne taille
La configuration de gulp dans l'article précédent est très simple, principalement pour l'affichage de démonstration et le débogage. Cet article sera relativement détaillé, y compris la compression, la fusion et les horodatages.
Dans les villes dotées d'environnements Internet relativement bons, les projets plus importants qui nécessitent une collaboration entre plusieurs personnes devraient tous utiliser la modularité (il s'agit ici principalement des systèmes de modules commonjs et ES6, et non des précédents require.js et sea.js). Le code se concentrera également davantage sur la manière de séparer et d’injecter, plutôt que de simplement fusionner.
Mais dans de nombreuses petites entreprises, les modèles ou technologies de développement sont encore relativement traditionnels, ou certains petits projets n'ont pas du tout besoin d'utiliser les technologies les plus avancées.
Cette configuration est donc principalement destinée aux projets de petite et moyenne taille comme celui-ci.
1. Outils et versions requis
Outil de gestion de paquets : Yarn v0.24.5
Outil de build automatisé : gulp v4.0
2.Installation de l'outil
fil ajouter global gulpjs/gulp#4.0
3. Configuration de l'environnement de développement
<span style="color: #0000ff">var</span> gulp = require('gulp'<span style="color: #000000">), pug </span>= require('gulp-pug'<span style="color: #000000">), less </span>= require('gulp-less'<span style="color: #000000">), </span><span style="color: #008000">//</span><span style="color: #008000">当发生异常时提示错误 确保本地安装gulp-notify和gulp-plumber</span> notify = require('gulp-notify'<span style="color: #000000">), plumber </span>= require('gulp-plumber'<span style="color: #000000">), sourcemaps </span>= require('gulp-sourcemaps'<span style="color: #000000">), browserSync </span>= require('browser-sync'<span style="color: #000000">).create() reload </span>=<span style="color: #000000"> browserSync.reload; </span><span style="color: #0000ff">var</span> LessAutoprefix = require('less-plugin-autoprefix'<span style="color: #000000">), autoprefix </span>= <span style="color: #0000ff">new</span> LessAutoprefix({ browsers: ['last 2 versions'<span style="color: #000000">] }); </span><span style="color: #008000">//</span><span style="color: #008000"> 文件路径</span> <span style="color: #0000ff">var</span> paths =<span style="color: #000000"> { pug: { src: </span>'src/pug/pages/*.pug'<span style="color: #000000">, dest: </span>'dev/html/'<span style="color: #000000">, watch: </span>'src/pug/**/*.pug'<span style="color: #000000"> }, less: { src: </span>'src/less/**/*.less'<span style="color: #000000">, dest: </span>'dev/css/'<span style="color: #000000">, watch: </span>'src/less/**/*.less'<span style="color: #000000"> }, js: { src: </span>'src/js/**/*.js'<span style="color: #000000">, dest: </span>'dev/js/'<span style="color: #000000">, watch: </span>'src/js/**/*.js'<span style="color: #000000"> }, img: { src: </span>'src/img/**/*'<span style="color: #000000">, dest: </span>'dev/img/'<span style="color: #000000">, watch: </span>'src/img/**/*'<span style="color: #000000"> } } </span><span style="color: #008000">//</span><span style="color: #008000"> 启动 browserSync 服务,自己启动server,并且为浏览器实时刷新提供服务</span> gulp.task('browserSync', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> browserSync.init({ server: { baseDir: </span>'./'<span style="color: #000000"> }, files: </span>'./dev/**/*'<span style="color: #000000"> }); }) </span><span style="color: #008000">//</span><span style="color: #008000"> 将pug文件转换为html</span> gulp.task('pug', <span style="color: #0000ff">function</span><span style="color: #000000"> buildHTML() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.pug.src) .pipe(plumber({errorHandler: notify.onError(</span>'Error: <%= error.message %>'<span style="color: #000000">)})) .pipe(pug()) .pipe(gulp.dest(paths.pug.dest)); }); </span><span style="color: #008000">//</span><span style="color: #008000"> 编译less文件</span> gulp.task('less', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.less.src) .pipe(plumber({errorHandler: notify.onError(</span>'Error: <%= error.message %>'<span style="color: #000000">)})) .pipe(sourcemaps.init()) .pipe(less({ plugins: [autoprefix] })) .pipe(sourcemaps.write()) .pipe(gulp.dest(paths.less.dest)); }) </span><span style="color: #008000">//</span><span style="color: #008000"> 复制js文件</span> gulp.task('js', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.js.src) .pipe(gulp.dest(paths.js.dest)); }) </span><span style="color: #008000">//</span><span style="color: #008000"> 复制img文件</span> gulp.task('img', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.img.src) .pipe(gulp.dest(paths.img.dest)); }) </span><span style="color: #008000">//</span><span style="color: #008000"> 监听文件变化</span> gulp.task('watch', <span style="color: #0000ff">function</span><span style="color: #000000">() { gulp.watch(paths.pug.watch, gulp.parallel(</span>'pug'<span style="color: #000000">)) gulp.watch(paths.less.watch, gulp.parallel(</span>'less'<span style="color: #000000">)) gulp.watch(paths.js.watch, gulp.parallel(</span>'js'<span style="color: #000000">)) gulp.watch(paths.img.watch, gulp.parallel(</span>'img'<span style="color: #000000">)) }) </span><span style="color: #008000">//</span><span style="color: #008000"> 默认任务,在命令行输入`gulp`来启动任务</span> gulp.task('default', gulp.parallel('watch', 'browserSync', 'pug', 'less', 'js'))
Le plug-in gulp-pug est utilisé pour compiler des modèles pug, qui sont les modèles jade précédents. Le modèle pug est un moteur de modèles frontal et universel très puissant, et il est également très simple à apprendre pour des raisons spécifiques. utilisation, veuillez consulter mon autre article Article du didacticiel sur le carlin - Système de blog basé sur express+mongodb+pug - article sur le carlin.
Tout le monde sait que lorsque gulp surveille des tâches, si une erreur se produit dans un lien, gulp sera interrompu et la tâche gulp devra être redémarrée. Ici, vous pouvez utiliser deux plug-ins, gulp-notify et gulp-plomber, pour éviter l'interruption des tâches gulp.
4. Configuration de l'environnement de production
<span style="color: #0000ff">var</span> gulp = require('gulp'<span style="color: #000000">), del </span>= require('del'<span style="color: #000000">), pug </span>= require('gulp-pug'<span style="color: #000000">), less </span>= require('gulp-less'<span style="color: #000000">), cleanCSS </span>= require('gulp-clean-css'<span style="color: #000000">), base64 </span>= require('gulp-tobase64'<span style="color: #000000">), </span><span style="color: #008000">//</span><span style="color: #008000"> img64 = require('gulp-imgbase64'),</span> imagemin = require('gulp-imagemin'<span style="color: #000000">), babel </span>= require('gulp-babel'<span style="color: #000000">), uglify </span>= require('gulp-uglify'<span style="color: #000000">), rev </span>= require('gulp-rev'), <span style="color: #008000">//</span><span style="color: #008000"> 添加时间戳</span> revCollector = require('gulp-rev-collector'<span style="color: #000000">); </span><span style="color: #0000ff">var</span> LessAutoprefix = require('less-plugin-autoprefix'<span style="color: #000000">), autoprefix </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> LessAutoprefix({ browsers: [</span>'last 2 versions'<span style="color: #000000">] }); </span><span style="color: #008000">//</span><span style="color: #008000"> 文件路径</span> <span style="color: #0000ff">var</span> paths =<span style="color: #000000"> { pug: { src: </span>'src/pug/pages/*.pug'<span style="color: #000000">, dest: </span>'dist/html/'<span style="color: #000000"> }, less: { src: </span>'src/less/main.less'<span style="color: #000000">, dest: </span>'dist/css/'<span style="color: #000000"> }, js: { src: [</span>'src/js/**/*.js', '!src/js/lib/*.js'<span style="color: #000000">], dest: </span>'dist/js/'<span style="color: #000000"> }, img: { src: </span>'src/img/**/*'<span style="color: #000000">, dest: </span>'dist/img/'<span style="color: #000000"> } }; </span><span style="color: #008000">//</span><span style="color: #008000"> 将pug文件转换为html</span> gulp.task('pug', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.pug.src) .pipe(pug()) .pipe(gulp.dest(paths.pug.dest)); }); </span><span style="color: #008000">//</span><span style="color: #008000"> 编译less文件</span> gulp.task('less', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.less.src) .pipe(less({ plugins: [autoprefix] })) .pipe(base64({ maxsize: </span>8<span style="color: #000000"> })) .pipe(cleanCSS({ compatibility: </span>'ie8' <span style="color: #008000">//</span><span style="color: #008000"> 兼容性前缀保留</span> <span style="color: #000000"> })) .pipe(rev()) .pipe(gulp.dest(paths.less.dest)) .pipe(rev.manifest()) .pipe(gulp.dest(</span>'rev/css'<span style="color: #000000">)) }); </span><span style="color: #008000">//</span><span style="color: #008000"> 压缩图片</span> gulp.task('img', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.img.src) .pipe(imagemin({ optimizationLevel: </span>3<span style="color: #000000">, progressive: </span><span style="color: #0000ff">true</span><span style="color: #000000">, interlaced: </span><span style="color: #0000ff">true</span><span style="color: #000000"> })) .pipe(gulp.dest(paths.img.dest)); }); </span><span style="color: #008000">//</span><span style="color: #008000"> 编译JS文件</span> gulp.task('js', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span><span style="color: #000000"> gulp.src(paths.js.src) .pipe(babel({ presets: [</span>'es2015'<span style="color: #000000">] })) .pipe(uglify()) .pipe(rev()) .pipe(gulp.dest(paths.js.dest)) .pipe(rev.manifest()) .pipe(gulp.dest(</span>'rev/js'<span style="color: #000000">)); }); </span><span style="color: #008000">//</span><span style="color: #008000"> 引用的外部 JS 库,不需要做压缩和打时间戳等处理</span><span style="color: #008000"> //</span><span style="color: #008000"> 所以直接复制就行</span> gulp.task('copyJs', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span> gulp.src('src/js/lib/*.js'<span style="color: #000000">) .pipe(gulp.dest(</span>'dist/js/lib/'<span style="color: #000000">)) }) </span><span style="color: #008000">//</span><span style="color: #008000"> 替换加了MD5时间戳的文件</span> gulp.task('rev', gulp.series(gulp.parallel('img64', 'less', 'js'), <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span> gulp.src(['rev/**/*.json', 'dist/html/*.html'<span style="color: #000000">]) .pipe(revCollector({ replaceReved: </span><span style="color: #0000ff">true</span><span style="color: #000000"> })) .pipe(gulp.dest(paths.pug.dest)); })); </span><span style="color: #008000">//</span><span style="color: #008000"> Clean 任务执行前,先清除之前生成的文件</span> gulp.task('clean', <span style="color: #0000ff">function</span><span style="color: #000000">() { </span><span style="color: #0000ff">return</span> del('dist/'<span style="color: #000000">) }); </span><span style="color: #008000">//</span><span style="color: #008000"> 默认任务,在命令行输入`gulp`来启动任务</span> gulp.task('default', gulp.series('clean', gulp.series('img', gulp.parallel('rev', 'copyJs'))))
Dans l'environnement de production, le code doit être compressé et fusionné. De plus, chaque fois que le code est mis à jour et qu'une nouvelle version est publiée, pour que le client utilisateur télécharge le code mis à jour, nous devons également horodater. les fichiers CSS et JS.
Le plug-in gulp-rev est spécialement conçu pour tamponner les fichiers avec MD5, bien sûr, les références dans le fichier HTML doivent également être modifiées. Ce sera certainement une chose très gênante de les modifier manuellement. Nous avons donc également besoin du plug-in gulp-rev-collector pour nous aider à remplacer les fichiers estampillés MD5.
gulp-imgbase64, ce plug-in peut spécifier quels éléments img du fichier HTML sont convertis en base64. Si vous avez besoin d'une conversion plus personnalisée, vous pouvez utiliser ce plug-in.
5. Structure du répertoire du projet
XXX——
| — dist
—html
—css
— img
— js
—lib
| — développeur
—html
—css
— img
— js
—lib
– src
— carlin
— composants
—pages
— layout.pug
— moins
—pages
— main.less
— réinitialiser.less
— commun.less
| - fonctionnalité.less
— img
— js
—lib
Le dossier src contient le code métier principal, qui contient du code nécessitant une maintenance à long terme.
Le dossier dev est l'endroit où gulp génère du code pendant le développement.
Le dossierdist est l'endroit où gulp génère le code lors de la génération.
Dans cette configuration, je n'ai pas mis le code généré via gulp pendant le développement dans le dossier src comme beaucoup d'autres personnes l'ont fait, car cela provoquerait beaucoup de problèmes de référence et séparerait le code de développement et de production. L'environnement de code est séparé. , qui peut garder le dossier src pur sans aucun code compliqué.
Donc pour certains fichiers qui n'ont pas été traités par gulp, je les copierai directement à l'emplacement correspondant dans le dossier dev ou dist.
Le dossier dist sera effacé avant que chaque tâche gulp ne génère du code, nous n'avons donc pas besoin de nous soucier du contenu du dossier dist.
Le dossier dev peut contenir de nombreux fichiers redondants, mais nous n'avons pas à craindre que cela ait un impact sur nous. Peu importe si les fichiers sont supprimés ou écrasés, nous devons simplement nous assurer que les fichiers qu'ils contiennent. Le dossier src est correct.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Conseils pratiques pour convertir des lettres anglaises pleine chasse en formes demi-largeur. Dans la vie moderne, nous sommes souvent en contact avec des lettres anglaises et nous devons souvent saisir des lettres anglaises lorsque nous utilisons des ordinateurs, des téléphones portables et d'autres appareils. Cependant, nous rencontrons parfois des lettres anglaises pleine chasse et nous devons utiliser la forme demi-largeur. Alors, comment convertir des lettres anglaises pleine chasse en demi-chasse ? Voici quelques conseils pratiques pour vous. Tout d’abord, les lettres et chiffres anglais pleine chasse font référence à des caractères qui occupent une position pleine largeur dans la méthode de saisie, tandis que les lettres et chiffres anglais demi-chasse occupent une position pleine largeur.

Guide du débutant PyCharm : Conseils pratiques pour supprimer des projets PyCharm est un puissant environnement de développement intégré (IDE) Python Lors du développement de projets, vous devez parfois supprimer des projets ou des fichiers dans les projets. Cet article présentera des techniques pratiques pour supprimer des projets dans PyCharm et fournira des exemples de code spécifiques pour aider les novices à mieux comprendre et appliquer. 1. Supprimer le projet Supprimer le projet signifie supprimer tout le dossier du projet, ce qui est très utile lorsque nous devons nettoyer ou reconstruire le projet. Supprimer dans PyCharm

Apprenez le framework Django à partir de zéro : didacticiels et exemples pratiques Django est un framework d'application Web Python populaire qui simplifie le processus de développement de sites Web. Il fournit un ensemble puissant d'outils et de bibliothèques pour aider les développeurs à créer des applications Web efficaces, évolutives et sécurisées. Pour les débutants, apprendre Django peut être difficile, mais grâce à quelques tutoriels et exemples pratiques, vous pouvez rapidement démarrer et comprendre les concepts de base et l'utilisation de ce framework. Cet article vous guidera étape par étape pour apprendre la boîte Django
![Tutoriel d'utilisation de [Outils Linux] -yum/gdb !](https://img.php.cn/upload/article/000/887/227/170978100851477.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
yum est un outil de gestion de progiciels couramment utilisé et gdb est un puissant outil de débogage. Voici leurs didacticiels d'utilisation : Didacticiel d'utilisation de yum : Installer des packages logiciels : utilisez la commande yuminstall pour installer des packages logiciels. Par exemple, pour installer le serveur Web Apache, vous pouvez exécuter yuminstallhttpd. Mettre à niveau les packages logiciels : utilisez la commande yumupdate pour mettre à niveau les packages logiciels installés. Par exemple, exécuter yumupdate mettra à niveau tous les packages du système. Supprimer un progiciel : utilisez la commande yumremove pour supprimer un progiciel. Par exemple, pour supprimer le serveur Web Apache, vous pouvez exécuter yumremovehttpd. Rechercher des packages : utilisez yumsear

Laravel Elixir est un ensemble d'outils d'automatisation front-end populaire basé sur Gulp, qui simplifie de nombreuses tâches qui nécessitaient auparavant un travail manuel. Mais la conception élégante de l'API de Laravel Elixir ne signifie pas que les développeurs n'ont pas du tout besoin de comprendre l'utilisation de Gulp. Au contraire, comprendre l'utilisation de Gulp permet de mieux comprendre le principe de fonctionnement de Laravel Elixir et d'améliorer l'efficacité du développement. Cet article explique comment utiliser Gulp dans le framework Laravel Elixir.

Terraform est un langage déclaratif qui sert de modèle à l'infrastructure que vous construisez. Après avoir eu un environnement de production OpenStack et un laboratoire à domicile pendant un certain temps, je confirme l'importance du déploiement et de la gestion des charges de travail du point de vue de l'administrateur et du locataire. Terraform est un outil logiciel open source permettant de gérer l'infrastructure en tant que code, en créant des plans d'infrastructure via un langage déclaratif. Il prend en charge la gestion Git et convient à GitOps. Cet article présente les bases de l'utilisation de Terraform pour gérer les clusters OpenStack. J'ai recréé le projet de démonstration OpenStack à l'aide de Terraform. Pour installer Terraform, j'ai utilisé CentOS comme tremplin

Pour afficher la bande passante et l'utilisation du réseau d'un serveur Linux, vous pouvez utiliser les commandes et outils suivants : Commande ifconfig : la commande ifconfig est utilisée pour afficher et configurer les informations de l'interface réseau, y compris la bande passante et l'utilisation du réseau. Utilisez la commande suivante pour afficher les informations sur toutes les interfaces réseau : ifconfig Cette commande affichera des informations détaillées sur chaque interface réseau, y compris le nombre de paquets reçus et envoyés et l'utilisation du réseau. Commande ip : la commande ip est une alternative plus puissante pour afficher et configurer des informations telles que les interfaces réseau et les tables de routage. Utilisez la commande suivante pour afficher les informations sur toutes les interfaces réseau : ip-slink Cette commande affichera des statistiques pour chaque interface réseau, y compris le nombre de paquets reçus et envoyés, ainsi que l'utilisation du réseau.

Utilisez les outils de ligne de commande : vous pouvez utiliser la commande ls/dev pour répertorier tous les périphériques série du système. Généralement, le nom du périphérique série commence par ttyS ou ttyUSB. Vous pouvez utiliser la commande dmesg|greptty pour afficher les informations sur le périphérique série au démarrage du système. Vous pouvez utiliser des outils de surveillance du port série tels que minicom, PuTTY, etc. pour ouvrir le périphérique du port série pour tester les données. En envoyant et en recevant des données avec succès, vous pouvez vérifier l'état de fonctionnement normal du port série. Vous pouvez utiliser des outils de détection de port série spécialisés (tels que SerialPortMonitor, RealTerm, etc.) pour analyser les périphériques de port série du système à des fins de test et de débogage.
