Modifier les éléments Mix
Introduction
- Install Node
- Run Mix
- Écoutez les changements de ressources
- Utilisez des feuilles de style
- Less Stylus
- PostCSS Vanilla JS
- Configuration Webpack personnalisée
- Fusionner la configuration personnalisée
- Fichiers de configuration auto-définis
- Copier des fichiers et des répertoires Variables d'environnement
- Notification
Compiler les ressources (Mix)
- Introduction
- Installation et configuration
- Exécuter Mix
- Utiliser la feuille de style
- Utiliser JavaScript
- Copier les fichiers et les répertoires
- Contrôle de version/Effacement du cache
- Rechargement de la synchronisation du navigateur
- Variables d'environnement
- Notifications
Présentation
Laravel Mix fournit une API pour définir les étapes de construction de Webpack pour utiliser les préprocesseurs CSS et JavaScript courants dans votre application. En enchaînant les appels à ces méthodes concises, les pipelines de ressources peuvent être définis de manière fluide. Par exemple :
Si vous ne savez pas comment démarrer avec Webpack et la compilation de ressources, vous allez adorer Laravel Mix. Cependant, vous n'êtes pas obligé de l'utiliser pour développer votre application ; vous pouvez utiliser n'importe quel outil de pipeline de ressources, voire aucun.
Installation et configuration
Installer Node
Avant de déclencher Mix, assurez-vous que Node.js et NPM sont installés sur la machine.
node -v npm -v
Par défaut, Laravel Homestead inclut tout ce dont vous avez besoin ; mais si vous utilisez Vagrant, vous pouvez également installer les dernières versions de Node et NPM à l'aide des installateurs graphiques plus faciles à utiliser disponibles sur leur page de téléchargement.
Laravel Mix
Il ne reste plus qu'à installer Laravel Mix. Dans une nouvelle installation de Laravel, le fichier
package.json
文件。默认的package.json
文件包含了起步所需的所有东西,把它想像成composer.json
se trouve à la racine de la structure de répertoires, sauf qu'il définit des dépendances pour Node, pas pour PHP. Installez les dépendances auxquelles il fait référence en exécutant la commande suivante :npm install
Exécuter Mix
Mix est la configuration de niveau supérieur de Webpack, donc pour exécuter la tâche Mix, il vous suffit d'exécuter un script contenu dans le fichier
package.json
par défaut de Laravel :package.json
文件中的脚本:// 运行 Mix 任务... npm run dev // 运行所有的 Mix 任务并最小化输出结果... npm run production
监听资源变化
npm run watch
命令能够在终端持续运行并且监听相关文件的变化。一旦它发现改变,Webpack 将自动重新编译资源:npm run watch
你会发现在特定环境下,文件发生改变并不会促使 Webpack 更新。如果系统中出现这种情况,不妨考虑使用
watch-poll
命令:npm run watch-poll
使用样式表
webpack.mix.js
文件所有资源编译的切入点。把它想像为 Webpack 的轻量级配置封装。Mix 任务可以与如何编译资源的配置一起被链式调用。Less
less
方法可用于将 Less 编译成 CSS。下面的语句将app.less
文件编译为public/css/app.css
:mix.less('resources/less/app.less', 'public/css');
可以通过多次调用
less
方法完成多文件编译:mix.less('resources/less/app.less', 'public/css') .less('resources/less/admin.less', 'public/css');
如果希望自定义编译后的 CSS 文件名,可以把完整的文件路径作为传递给
less
方法的第二个参数:mix.less('resources/less/app.less', 'public/stylesheets/styles.css');
如果需要覆盖 隐含的 Less 插件选项 ,可以传递一个对象作为
mix.less()
的第三个参数:mix.less('resources/less/app.less', 'public/css', { strictMath: true });
Sass
sass
方法能将 Sass 编译成 CSS。可以像下面这样使用这个方法:mix.sass('resources/sass/app.scss', 'public/css');
和
less
方法类似,可以将多个 Sass 文件编译为各自的 CSS 文件,并为结果 CSS 自定义输出目录:mix.sass('resources/sass/app.sass', 'public/css') .sass('resources/sass/admin.sass', 'public/css/admin');
额外的 Node-Sass 插件选项 可以作为第三个参数:
mix.sass('resources/sass/app.sass', 'public/css', { precision: 5 });
Stylus
与 Less 和 Sass 相似,
stylus
方法将 Stylus 编译成 CSS:mix.stylus('resources/stylus/app.styl', 'public/css');
还可以安装额外的 Stylus 插件,比如 Rupture 。先通过 NPM (
npm install rupture
)安装有插件,然后在调用mix.stylus()
mix.stylus('resources/stylus/app.styl', 'public/css', { use: [ require('rupture')() ] });
Écouter les changements de ressources
npm run watch
La commande peut continuer à s'exécuter dans le terminal et surveiller modifications dans les fichiers associés. Webpack recompilera automatiquement les ressources une fois qu'il détectera des modifications :mix.sass('resources/sass/app.scss', 'public/css') .options({ postCss: [ require('postcss-css-variables')() ] });
Vous constaterez que dans certaines circonstances, la modification de fichiers n'invite pas Webpack à se mettre à jour. Si cette situation se produit dans votre système, vous pouvez envisager d'utiliser la commandewatch-poll
:mix.styles([ 'public/css/vendor/normalize.css', 'public/css/vendor/videojs.css'], 'public/css/all.css' );
🎜🎜🎜Utiliser des feuilles de style🎜🎜Le fichierwebpack.mix.js
est le point d'entrée pour compiler toutes les ressources. Considérez-le comme un wrapper de configuration léger pour Webpack. Les tâches mixtes peuvent être enchaînées avec la configuration de la manière dont les ressources sont compilées. 🎜🎜🎜🎜🎜Less
🎜less
peut être utilisée pour convertir < a href="http://lesscss.org/">Less🎜 compilé en CSS. L'instruction suivante compile le fichierapp.less
enpublic/css/app.css
: 🎜.example { background: url('../images/example.png'); }
🎜Cela peut être fait en appelantless
méthode plusieurs fois Compilation multi-fichiers : 🎜.example { background: url(/images/example.png?d41d8cd98f00b204e9800998ecf8427e); }
🎜Si vous souhaitez personnaliser le nom du fichier CSS compilé, vous pouvez transmettre le chemin complet du fichier comme deuxième paramètre à la méthodeless
: 🎜mix.sass('resources/app/app.scss', 'public/css') .options({ processCssUrls: false });
🎜Si vous devez remplacer les Implicit Less options de plug-in🎜, vous pouvez passer un objet comme troisième paramètre demix. less()
Paramètres : 🎜.example { background: url("../images/thing.png"); }
🎜🎜🎜🎜Sass
🎜Méthode sass
Peut compiler Sass🎜 en CSS. Vous pouvez utiliser cette méthode comme ceci : 🎜mix.js('resources/js/app.js', 'public/js') .sourceMaps();
🎜Similaire à la méthodeless
, vous pouvez compiler plusieurs fichiers Sass dans leurs propres fichiers CSS et personnaliser le répertoire de sortie pour le CSS résultant : 🎜mix.js('resources/js/app.js', 'public/js');
🎜Extra < a href="https://github.com/sass/node-sass#options">Les options du plugin Node-Sass 🎜 peuvent être utilisées comme troisième paramètre : 🎜mix.js('resources/js/app.js', 'public/js') .extract(['vue'])
🎜🎜🎜🎜Stylus
🎜Semblable à Less et Sass, la méthodestylus
Stylus🎜 compilé en CSS : 🎜<script src="/js/manifest.js"></script> <script src="/js/vendor.js"></script> <script src="/js/app.js"></script>
🎜 Vous pouvez également installer des plug-ins Stylus supplémentaires, tels que Rupture🎜. Installez d'abord le plugin via NPM (npm install rupture
), puis incluez-le lors de l'appel demix.stylus()
: 🎜mix.react('resources/js/app.jsx', 'public/js');
🎜🎜🎜🎜🎜🎜PostCSS
PostCSS est un outil puissant de conversion CSS, et il est déjà inclus dans Laravel Mix. Par défaut, Mix ajoute automatiquement tous les préfixes tiers CSS3 nécessaires à l'aide du populaire plugin Autoprefixer. Cependant, vous êtes libre d’ajouter les plugins supplémentaires de votre choix dans votre application. Installez d'abord les plug-ins requis via NPM, puis référencez-les dans le fichier
webpack.mix.js
:webpack.mix.js
文件引用:mix.scripts([ 'public/js/admin.js', 'public/js/dashboard.js'], 'public/js/all.js' );
原生 CSS
如果想要将几个原生 CSS 样式表合并到单个文件中,可以使用
styles
方法。mix.webpackConfig({ resolve: { modules: [ path.resolve(__dirname, 'vendor/laravel/spark/resources/assets/js') ] } } );
URL 处理
因为是基于 Webpack 之上构建,了解几个 Webpack 概念就很重要了。对于 CSS 编译,Webpack 将重写和优化任何带有样式表的
url()
调用。虽然初听上去好像很奇怪,但这确实是个强大的功能。 想像一下我们想要编译包含图片相对 URL 的 Sass:mix.copy('node_modules/foo/bar.css', 'public/css/bar.css');
{note} 任何给定
url()
的绝对路径将被排除在 URL 重写之外。例如url('/images/thing.png')
或url('http://example.com/images/thing.png')
将不会被修改。默认情况下,Laravel Mix 和 Webpack 将找到
example.png
, 将其复制到public/images
文件夹,然后重写生成的样式表中的url()
。如此一平,编译后的 CSS 将变成:mix.copyDirectory('resources/img', 'public/img');
尽管此功能可能很有用,但是已有文件夹结构可能已经按你的预期做了配置。这种情况下,你可以禁用
url()
重写:mix.js('resources/js/app.js', 'public/js') .version();
在
webpack.mix.js
文件中加入这项配置,Mix 将不再匹配任何url()
或者复制资源到 public 目录。换句话说,编译后的 CSS 看上去和你原来输入的内容一样:<script src="{{ mix('/js/app.js') }}"></script>
源码映射
虽然默认情况下源码映射被禁用,但是可以通过在
webpack.mix.js
文件中调用mix.sourceMaps()
mix.js('resources/js/app.js', 'public/js'); if (mix.inProduction()) { mix.version(); }
Native CSSSi vous souhaitez combiner plusieurs feuilles de style CSS natives en un seul fichier, vous pouvez utiliser la méthodestyles
. 🎜mix.browserSync('my-domain.test'); // 或... // https://browsersync.io/docs/options mix.browserSync({ proxy: 'my-domain.test' });
🎜🎜🎜🎜🎜Traitement d'URL🎜🎜Parce qu'il est construit sur Webpack, il suffit de comprendre quelques concepts de Webpack Très important. Pour la compilation CSS, Webpack réécrira et optimisera tous les appelsurl()
avec des feuilles de style. Même si cela peut paraître étrange au premier abord, il s’agit en réalité d’une fonctionnalité puissante. Imaginez que nous voulions compiler Sass contenant des URL relatives vers des images : 🎜MIX_SENTRY_DSN_PUBLIC=http://example.com
🎜{note} Tout chemin absolu donné à
🎜Par défaut, Laravel Mix et Webpack trouveronturl()
sera exclu de la réécriture d'URL. Par exemple,url('/images/thing.png')
ouurl('http://example.com/images/thing.png')
ne sera pas modifié. 🎜example.png
, le copieront dans le dossierpublic/images
, puis remplaceront les styles générésurl()
dans le tableau. Une fois cela fait, le CSS compilé ressemblera à : 🎜process.env.MIX_SENTRY_DSN_PUBLIC
🎜Bien que cette fonctionnalité puisse être utile, la structure des dossiers existante est peut-être déjà configurée comme prévu. Dans ce cas, vous pouvez désactiver la réécritureurl()
: 🎜mix.disableNotifications();
🎜Ajoutez cette configuration dans le fichierwebpack.mix.js
et Mix ne correspondra plus à rienurl()
Ou copiez la ressource dans le répertoire public. En d'autres termes, le CSS compilé ressemble à ce que vous avez saisi à l'origine : 🎜rrreee🎜🎜🎜🎜🎜 Cartes sources🎜🎜Bien que les cartes sources soient désactivées par défaut, elles peuvent être activées en appelant la méthodemix.sourceMaps()
dans le fichierwebpack.mix.js
. Bien que cela augmente le coût de compilation/exécution, cela peut fournir des informations de débogage supplémentaires aux outils de développement du navigateur lors de la compilation des ressources. 🎜rrreee🎜🎜🎜🎜🎜🎜Travailler avec JavaScript
Mix fournit plusieurs fonctionnalités qui facilitent le travail avec des fichiers JavaScript, telles que la compilation d'ECMAScript 2015, l'empaquetage de modules, la réduction et la fusion de fichiers JavaScript natifs. Mieux encore, tout cela fonctionne très bien sans aucune configuration requise.
rrreeeAvec juste cette ligne de code, vous pouvez prendre en charge :
- Syntaxe ES2015
- module
- Compiler les fichiers
.vue
..vue
文件。 - 为生产环境最小化代码。
Vendor 提取
将应用自身的 JavaScript 和第三方库绑定在一起有个潜在的缺点:会使长期缓存变得困难。例如,应用代码的单独更新将强制浏览器重新下载全部第三方库,即使第三方库没有发生变化。
如果你打算频繁地更新应用中的 JavaScript,应该考虑将第三方库提取到它自己的文件中。这样一来,应用代码的改变将不影响
rrreeevendor.js
文件缓存。Mix 的extract
方法为之提供了便利:extract
方法接受你想要提取到vendor.js
的全部库或模块的数组作为参数。使用上面例子中的代码片段,Mix 将生成如下文件:public/js/manifest.js
: Webpack 运行时清单public/js/vendor.js
: 第三方库代码public/js/app.js
: 应用代码
为避免 JavaScript 错误,应确保按适应顺序加载这些文件:
rrreeeReact
Mix 能自动安装 React 支持所需的 Babel 插件。要达成此目的,只需要用
rrreeemix.react()
替换mix.js()
:Mix 将在后台下载并包含适用的
babel-preset-react
Babel 插件。Vanilla JS
与利用
rrreeemix.styles()
整合样式表类似,你也可以使用scripts()
方法整合并最小化任意数量的 JavaScript 文件:对于不需要使用 Webpack 编译 JavaScript 的遗留代码,这个选项尤其有用。
{tip}
Réduire le code pour les environnements de production.mix.babel()
是mix.scripts()
的一个小变种。它的方法签名与scripts
appliquera son propre JavaScript Le regroupement avec des bibliothèques tierces présente un inconvénient potentiel : cela peut rendre la mise en cache à long terme difficile. Par exemple, une mise à jour distincte du code de l'application obligera le navigateur à retélécharger toutes les bibliothèques tierces, même si les bibliothèques tierces n'ont pas changé. 🎜🎜Si vous prévoyez de mettre fréquemment à jour le JavaScript de votre application, vous devriez envisager d'extraire la bibliothèque tierce dans son propre fichier. De cette façon, les modifications apportées au code de votre application n'affecteront pas le cache du fichierExtraction de fournisseur
vendor.js
. La méthodeextract
de Mix est pratique pour cela : 🎜rrreee🎜 La méthodeextract
accepte toutes les bibliothèques ou modules que vous souhaitez extraire dans le tableauvendor.js
comme paramètre. En utilisant l'extrait de code de l'exemple ci-dessus, Mix générera le fichier suivant : 🎜🎜🎜🎜public/js/manifest.js
: Manifeste d'exécution Webpack🎜🎜public /js/vendor.js
: Code de bibliothèque tierce🎜🎜public/js/app.js
: Code d'application 🎜< /ul>🎜🎜Pour éviter les erreurs JavaScript, assurez-vous de charger ces fichiers dans un ordre adaptatif : 🎜rrreee🎜🎜🎜🎜React
🎜Mix peut installer automatiquement les plug-ins Babel requis pour la prise en charge de React. Pour ce faire, remplacez simplementmix.js()
parmix.react()
: 🎜rrreee🎜Mix sera téléchargé en arrière-plan et inclura lebabel applicable - plugin Babel preset-react
. 🎜🎜🎜🎜🎜Vanilla JS
🎜 et en utilisantmix.styles()
Semblable à l'intégration de feuilles de style, vous pouvez également utiliser la méthodescripts()
pour intégrer et minimiser n'importe quel nombre de fichiers JavaScript : 🎜rrreee🎜Pour le code existant qui ne nécessite pas que Webpack compile JavaScript, cette option Particulièrement utile. 🎜🎜{tip}
mix.babel()
est une petite variante demix.scripts()
. Sa signature de méthode est exactement la même que celle desscripts
mais les fichiers intégrés seront compilés par Babel, qui convertit le code ES2015 en JavaScript vanilla que le navigateur comprend. 🎜🎜🎜🎜🎜🎜🎜🎜Configuration Webpack personnalisée
Lavarel Mix fait référence à des fichiers
webpack.config.js
préconfigurés en arrière-plan pour accélérer le démarrage et le fonctionnement. Parfois, vous devrez peut-être modifier ce fichier manuellement. Vous pouvez avoir un chargeur ou un plugin spécial que vous devez référencer, ou vous préférerez peut-être utiliser Stylus au lieu de Sass. Dans ce cas, vous avez deux options :webpack.config.js
文件以加速启动和运行。有时,你可能需要手动编辑这个文件。你可能有一个特殊的加载器或插件需要引用,或者可能更愿意用 Stylus 代替 Sass。这种情况下,你有两个选择:合并自定义配置
Mix 提供了
rrreeewebpackConfig
方法来合并任意简短的 Webpack 配置以覆盖已有配置。这是个非常勾人的选择,因为它不要求你复制和维护你自己的webpack.config.js
副本。webpackConfig
方法接受一个对象作为作参数,它包含你想要应用的任何 Webpack 特定配置 ,自定义配置文件
如果你想完全自定义 Webpack 配置,将
node_modules/laravel-mix/setup/webpack.config.js
文件复制到项目的根目录。然后将package.json
文件中所有的--config
引用都指向新复制的配置文件。如果选择用这种方式自定义配置,Mixwebpack.config.js
后续的任何更新,都必须手动合并到你的自定义配置文件中。复制文件 & 目录
rrreeecopy
方法可以用于将文件和目录复制到新位置。当node_modules
目录中特殊的资源需要重新定位到public
文件夹时,这个方法很有用。复制文件夹时,
rrreeecopy
方法将扁平化目录结构。想要保持目录的原始结构,需要使用copyDirectory
方法:版本管理 / 缓存销毁
许多开发者在他们编译后的资源添加时间戳或唯一令牌作后缀,强制浏览器加载新的资源,以替换旧的代码副本。Mix 可以使用
version
方法替你处理它们。.
rrreeeversion
方法自动在所有编译后的文件名后追加唯一的哈希值,从而实现更方便的缓存销毁:在生成版本化文件后,你不会知道确切的文件名。因此,你需要在 views 中使用 Laravel 的全局
rrreeemix
函数载入相应的哈希资源。mix
函数自动判断哈希文件的当前文件名:通常在开发阶段不需要版本化文件,你可以仅在运行
npm run production
Fusionner la configuration personnalisée
Mix fournit
webpackConfig
Méthode pour fusionner toute configuration Webpack courte pour écraser la configuration existante. Il s'agit d'une option très intéressante car elle ne nécessite pas que vous copiez et conserviez votre propre copie dewebpack.config.js
. La méthodewebpackConfig
accepte comme argument un objet contenant n'importe quelle configuration spécifique au Webpack , rrreee que vous souhaitez appliquerFichier de configuration personnalisé
Si vous souhaitez personnaliser complètement la configuration du Webpack, ajoutez🎜🎜🎜node_modules/laravel-mix/setup/webpack Copiez le .config.js
dans le répertoire racine de votre projet. Pointez ensuite toutes les références--config
dans le fichierpackage.json
vers le fichier de configuration nouvellement copié. Si vous choisissez de personnaliser la configuration de cette manière, toutes les mises à jour ultérieures de Mixwebpack.config.js
doivent être fusionnées manuellement dans votre fichier de configuration personnalisé.🎜Copie de fichiers et de répertoires
🎜copie La méthode
peut être utilisée pour copier des fichiers et des répertoires vers un nouvel emplacement. Cette méthode est utile lorsque des ressources spéciales du répertoirenode_modules
doivent être déplacées vers le dossierpublic
. 🎜rrreee🎜Lors de la copie d'un dossier, la méthodecopy
aplatira la structure des répertoires. Pour conserver la structure originale du répertoire, vous devez utiliser la méthodecopyDirectory
: 🎜rrreee🎜🎜🎜🎜Gestion des versions/destruction du cache
🎜De nombreux développeurs ajoutent des horodatages ou des jetons uniques comme suffixes à leurs ressources compilées pour forcer le navigateur à charger de nouvelles ressources pour remplacer l'ancienne copie de code. Mix peut les gérer pour vous en utilisant la méthodeversion
. La méthode .🎜🎜version
ajoute automatiquement une valeur de hachage unique à tous les noms de fichiers compilés, permettant une destruction du cache plus pratique : 🎜rrreee🎜Après avoir généré le fichier versionné, vous ne connaîtrez pas le nom exact du fichier. . Par conséquent, vous devez utiliser la fonction globalemix
de Laravel dans les vues pour charger la ressource de hachage correspondante. La fonctionmix
détermine automatiquement le nom de fichier actuel du fichier de hachage : 🎜rrreee🎜 Habituellement, il n'y a pas besoin de fichiers versionnés pendant la phase de développement, vous ne pouvez exécuter la version qu'en exécutantnpm run production
Traitement chimique : 🎜rrreee🎜🎜🎜🎜🎜🎜Browsersync Reload
BrowserSync peut détecter automatiquement les modifications de fichiers et injecter des modifications dans le navigateur sans actualisation manuelle. Vous pouvez appeler la méthode
rrreeemix.browserSync()
pour activer ce support :mix.browserSync()
方法开启此项支持:可以传递字符串(代理)或对象 Y(BrowserSync 设置)给此方法。然后使用
npm run watch
命令启动 Webpack 的开发服务器。再编辑脚本或者 PHP 文件,就会看到浏览器立即刷新以响应你的修改。环境变量
可以通过在
rrreee.env
文件中添加MIX_
前缀,将环境变量注入到 Mix:一旦此变量被定义在
rrreee.env
文件中,就可以借助process.env
对象访问它。如果在运行watch
任务时这个值发生改,就需要重启任务:通知
如果可用,Mix 将自动为每次绑定显示操作系统通知。这将为你提供编译是否成功的实时反馈。不过,可能在某些情况下,你希望禁用通知。一个例子是在生产服务器上触发 Mix。通知可以借助
Vous pouvez passer une chaîne (proxy) ou un objet Y (paramètres BrowserSync) à cette méthode. Utilisez ensuite la commandedisableNotifications
rrreeenpm run watch
pour démarrer le serveur de développement de Webpack. Modifiez à nouveau le script ou le fichier PHP et vous verrez le navigateur s'actualiser immédiatement en réponse à vos modifications. 🎜Des variables d'environnement🎜🎜 peuvent être ajoutées dans le fichier.env
PréfixeMIX_
pour injecter des variables d'environnement dans Mix : 🎜rrreee🎜Une fois cette variable définie dans le fichier.env
, vous pouvez utiliserprocess.env
l'objet y accède. Si cette valeur change lors de l'exécution de la tâchewatch
, vous devez redémarrer la tâche : 🎜rrreee🎜🎜🎜🎜🎜Notifications🎜🎜Si disponible, Mix affichera automatiquement les notifications du système d'exploitation pour chaque liaison. Cela vous donnera un retour en temps réel sur le succès de la compilation. Cependant, il peut arriver que vous souhaitiez désactiver les notifications. Un exemple est le déclenchement de Mix sur un serveur de production. Les notifications peuvent être configurées à l'aide de la méthodedisableNotifications
. 🎜rrreee🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜
- Laravel Mix