Laravel基礎チュートリアル - 錬金術医学
Laravel Elixir (Alchemy)
はじめに
Laravel Elixir は、アプリケーションの基本的な Gulp タスクを定義するためのシンプルで流暢な API を提供します。 Elixir は、一般的に使用される CSS および JavaScript のプリプロセッサとテスト ツールをいくつか提供します。 Elixir を使用すると、呼び出しを連鎖させることでリソース パイプラインをスムーズに操作できます。例:
elixir(function (mix) { mix.sass('app.scss') .coffee('app.coffee');})
Gulp とリソースのプリコンパイルの使用方法を疑問に思ったことがあるなら、間違いなく Laravel Elixir の虜になるでしょう。実際、それを使用せずにアプリケーションを開発することもできます。リソース パイプライン ツールを使用するか、まったく使用しないかは自由です。
インストールと開始
Node のインストール
Elixir に触れる前に、まず Node がマシンにインストールされていることを確認する必要があります:
node -v
デフォルトでは、Laravel Homestead には必要なものがすべて含まれています。Vagrant を使用する場合は、ここで Node を非常に簡単にインストールすることもできます。
Gulp
次に、NPM を通じて Gulp をグローバルにインストールする必要があります:
npm install --global gulp
バージョン コントローラーを使用する場合は、npm shhrinkwrap を実行して NPM の依存関係をロックすることをお勧めします:
npm shrinkwrap
このコマンドを実行したら。 npm-shrinkwrap.json ファイルをソース管理に自由に送信できます。
Laravel Elixir
最後に残っているのは、Elixir をインストールすることです。新しいlaravelアプリケーションでは、ルートディレクトリにpackage.jsonファイルがあります。これは、composer.json ファイルのように考えることができます。違いは、PHP ではなくノードの依存関係を定義することです。これらの依存関係は、次のコマンドを使用してインストールできます:
npm install
Windows システムで開発している場合、または仮想マシンで Windows システムを実行している場合は、npm install コマンドを実行し、--no-bin-links オプションを追加する必要があります。 :
npm install --no-bin-links
Elixir を実行する
Elixir は Gulp 上に構築されているため、Elixir タスクを実行するには、ターミナルで gulp コマンドを実行するだけです。コマンドに --production フラグを追加すると、CSS ファイルと JavaScript ファイルを圧縮するように Elixir に指示します。
// Run all tasks...gulp// Run all tasks and minify all CSS and JavaScript...
リソース ファイルの変更を監視する
ファイルが変更されるたびに gulp コマンドを再実行する必要がないようにするには、次のようにします。リソース ファイルの変更を監視するには、gulp watch コマンドを使用する必要があります。このコマンドはターミナルで引き続き実行されます。リソース ファイルへの変更が検出されると、新しいファイルが自動的にコンパイルされます:
gulp watch
スタイル ファイルの操作
プロジェクトのルート ディレクトリには、すべての Elixir タスクを含む gulpfile.js ファイルがあります。 Elixir タスクはチェーンで呼び出すことができ、リソース ファイルは規則正しい方法でコンパイルされます。
Less
less メソッドを使用すると、より少ないファイルを CSS にコンパイルできます。 less メソッドは、less ファイルが resource/assets/less ディレクトリに保存されていることを前提としています。デフォルトでは、以下の例では、タスク実行の結果、コンパイルされた CSS ファイルが public/css/app.css:
elixir(function (mix) { mix.less('app.less');});
elixir(function (mix) {mix.less([ 'app.less', 'controllers.less']); });
elixir(function (mix) {mix.less('app.less', 'public/stylesheets');});// Specifying a specific output filename...elixir(function (mix) {mix.less('app.less', 'public/stylesheets/style.css');});
sass メソッドを使用すると、sass ファイルを CSS にコンパイルできます。 Sass ファイルが resource/assets/sass に保存されていることを前提としています。このメソッドは次のように使用できます:
elixir(function (mix) { mix.sass('app.scss'); });
elixir(function (mix) { mix.sass([ 'app.scss', 'controllers.scss' ], 'public/assets/css'); });
複数の CSS ファイルを 1 つのファイルにマージしたい場合は、styles メソッドを使用できます。渡す必要があるファイルのパスは、resources/assets/css ディレクトリに対する相対パスであり、デフォルトのマージ結果は public/css/all.css に保存されます:
elixir(function (mix) { mix.styles([ 'normalize.css', 'main.css' ]);});
elixir(function (mix) { mix.styles([ 'normalize.css', 'main.css' ], 'public/assets/css'); });
コンパイルマップはすぐに利用可能です。したがって、すべてのコンパイル済みファイルについては、同じディレクトリに *.css.map ファイルがあります。このマップ ファイルを使用すると、ブラウザ内でプリコンパイルされたコードの場所を追跡できるため、デバッグが容易になります。
マップを生成したくない場合は、設定でオフにすることができます:
elixir.config.sourcemaps = false;elixir(function (mix) { mix.sass('app.scss');});
Elixr は、ECMAPScript 6、CoffeeScript コンパイルなど、JavaScript の操作に役立つさまざまなメソッドも提供します、および Browserify モジュールの読み込み、スクリプトの圧縮、またはネイティブ JavaScript ファイルの単純なマージは問題ありません。
CoffeeScript
coffee メソッドは、CoffeeScript をネイティブ JavaScript にコンパイルするために使用できます。 Coffee メソッドは、CoffeeScript ファイルの文字列または配列を受け取ってファイルをコンパイルでき、CoffeeScript ファイルが resource/assets/coffee ディレクトリに保存されていることを前提としており、生成された JavaScript ファイルを public/js/app.js にマージします。
elixir(function (mix) { mix.coffee(['app.coffee', 'controllers.coffee']);});
Browserify
Elixir 也附带了 browserify 方法,该方法可以在浏览器中给你提供你所需要模块的加载,并且允许你使用 ECMAScript 6 和 JSX。
这个任务假设你的脚本存放在 resources/assets/js 并且会将结果文件输出到 public/js/main.js。你也可以传递第二个参数来指定输出的位置:
elixir(function (mix) { mix.browserify('main.js');});// Specifying a specific output filename...elixir(function(mix) { mix.browserify('main.js', 'public/javascripts/main.js');});
而 Browserify 附带了 Partialify 和 Babelify 转换器,你可以自由的安装你所希望的:
npm install aliasify --save-dev
elixir.config.js.browserify.transformers.push({ name: 'aliasify', options: {} });elixir(function (mix) { mix.browserify('main.js');});
Babel
babel 方法可以使你编译 ECMAScript 6 和 7 和 JSX 到原生的 JavaScript。该方法接收一个文件列表相对于 resources/assets/js 目录的数组,并且在 public/js 目录中生成 all.js 文件:
elixir(function (mix) { mix.babel([ 'order.js', 'product.js', 'react-component.jsx' ]); });
你可以传递第二个参数来指定不同的输出路径。除了进行 Babel 编译,其方法的功能和 mix.scripts 一样。
Scripts
如果你想要将多个 JavaScript 文件合并到一个文件中,你可以使用 scripts 方法。
scripts 方法假设你所有的文件都相对于 resouces/assets/js 目录,并且会默认的将结果编译到 public/js/all.js 文件中:
elixir(function (mix) { mix.scripts([ 'jquery.js', 'app.js' ]);})
如果你需要合并多个文件到多个不同的路径,你可以通过多次链式调用并传递第二个参数作为指定输出的路径:
elixir(function (mix) { mix.scripts(['app.js', 'controllers.js'], 'public/js/app.js') .scripts(['forum.js', 'threads.js'], 'public/js/forum.js');})
如果你需要合并指定目录下的所有脚本文件,你可以使用 scriptIn 方法。合并的结果将存放到 public/js/all.js:
elixir(function (mix) { mix.scriptsIn('public/js/some/directory')});
复制文件 & 目录
copy 方法可以用来复制文件和目录到一个新的位置。所有的操作都是相对于项目的根目录:
elixir(function (mix) { mix.copy('vendor/foo/bar.css', 'public/css/bar.css')})elixir(function(mix) { mix.copy('vendor/package/views', 'resources/views')})
版本 / 缓存移除
对于许多开发者比较痛苦的事就是手动的对资源文件增加时间戳或者唯一的 token 标识来强迫浏览器重新加载新的资源文件。Elixir 可以通过 version 方法来帮你自动的完成这些。
version 方法接收文件名称相对于 public 目录,并且它会自动的为文件名增加一个独特的 hash,这样就可以自动的进行缓存清除了。比如,新生成的文件名看上去像这样:all-16d570a7.css:
elixir(function (mix) { mix.version('css/all.css') });
在生成版本化的文件之后,你可以使用 laravel 的全局帮助函数 elixir 在你的视图文件中进行加载适当的 hashed 资源。elixir 方法会自动的判断文件的名称:
<link rel="stylesheet" href="{{ elixir('css/all.css') }}">
对多个文件进行版本化
你可以传递一个数组到 version 方法来进行多个文件的版本化:
elixir(function (mix) { mix.version(['css/all.css', 'js/app.js']);});
一旦文件本版本化,你就可以使用 laravel 的 elixir 方法去生成版本化的 link。记住,你只需要向 elixir 帮助方法中传递文件名的前缀就可以了,并不需要填写 hash 后的文件名。帮助方法会自动的识别 hash 后的文件名:
<link rel="stylesheet" href="{{ elixir('css/all.css') }}">
BrowserSync
BrowserSync 可以在你的前端资源文件变更之后自动的刷新的你浏览器。你可以使用 browserSync 方法来指导 Elixir 当你运行 gulp watch 命令时启动 BrowserSync 服务:
elixir(function (mix) { mix.browserSync(); });
一旦你运行 gulp watch,你可以通过访问你的应用使用 3000 端口来启用 browsersyncing: http://homestead.app:3000。如果你使用了 homestead.app 之外的域名作为本地开发的支持,你可以传递一个 options 数组到第一个参数到 browserSync 方法:
elixir(function (mix) { mix.browserSync({ proxy: 'project.app' }) });
调用已存在的 Gulp 任务
如果你需要从 Elixir 中调用已经存在的 Gulp 任务。你可以使用 task 方法。你可以想象一下你有一个 Gulp 任务是用来简单的发送一个文本:
gulp.task('speak', function () { var message = 'Tea...Earl Grey...Hot'; gulp.src('').pipe(shell('say ' + message))})
如果你想通过 Elixir 来调用这个任务,你可以使用 mix.task 方法并且传递任务的名称到该方法:
elixir(function (mix) { mix.task('speak')})
自定义监控
如果你需要注册一个监控者在你的自定义任务中监控每次文件的变更。你可以传递一个正则表达式作为第二个参数到 task 方法:
elixir(function (mix) { mix.task('speak', 'app/**/*.php') })
编写 Elixir 扩展
如果你需要比 Elixir task 方法所提供的更高的灵活性,你可以创建自己的 Elixir 扩展。Elixir 扩展允许你传递参数到你的自定义任务中。比如,你可以编写一个下面类似的扩展:
// File: elixir-extensions.jsvar gulp = require('gulp')var shell = require('gulp-shell')var Elixir = require('laravel-elixir')var Task = Elixir.TaskElixi.extends('speak', function (message) { new Task('speak', function () { return gulp.src('').pipe(shell('say ' + message)) }) })// mix.speak('Hello World')
就是这么简单。你应该注意,任务的专有逻辑应该编写在方法中传递给 Tast 构造函数作为第二个参数。你也可以将其存放在 Gulpfile 的顶部或者提取到独立的扩展文件中。比如,你可以存放你的扩展到 elixir-extendsions.js,然后在你的 Gulpfile 文件中进行载入:
// File: Gulpfile.jsvar elixir = require('laravel-elixir')require('./elixir-extendsions')elixir(function (mix) { mix.speak('Tea, Earl Grey, Hot')})
自定义监控者如果你希望在运行 gulp watch 时,你的自定义任务可以在文件变更时自动的触发,你可以注册一个监控者:
new Task('speak', function () { return gulp.src('').pipe(shell('say ' + mesage))}).watch('./app/**')

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。
