Grunt初心者向け改訂ガイド

2013年3月に、Grunt Starter Guideに記事を書いて、私のサイトで最も訪問された記事になりました。 Gruntと知り合いになったときに書いたもので、他の人よりも自分にとってのガイドでした。 今、18か月後、Gruntの使用方法を再検討する時が来たと感じました。これは、当時よりも多くのことを知っているからです。

コードが表示されるのを待つことができない場合は、すべてがGithubにあります。

すべてのユーザーにノードとGruntをインストールする


まず、 NodeGrunt CLI (コマンドラインインターフェイス)がインストールされていることを確認する必要があります


プロジェクトディレクトリの作成


このプロジェクトにはいくつかのディレクトリが必要です。 それらの構造を以下に示します。

 grunt/ src/ src/images/ src/scripts/ src/styles/ 

gruntfileを作成する


まず、 足場ツール(<br> grunt initやYeomanなど )を使用しなくなりました。 すべてをゼロからセットアップしました。 これは、私が現時点で何が起こっているかについて、より多くの理解があることを意味します。 何回かやったら難しくありません。

プロジェクトのルートで、 Gruntfile.jsというファイルを作成します
このファイルに次のコードを追加します。

 module.exports = function(grunt) { require('time-grunt')(grunt); require('load-grunt-config')(grunt, { jitGrunt: true }); }; 


信じられないかもしれませんが、それがGruntfileのすべてです。

time-gruntは各タスクと一般的なアセンブリにかかった時間を示し、 jitGrunt:trueload-grunt-configに高速のjit-gruntタスクローダー使用するように指示します (これはオプションですが、速度は良いですか?)。

パッケージファイルの作成


次に進み、ベースのpackage.jsonファイルを作成します。 このファイルには、近い将来プロジェクトの依存関係が含まれます。 以下を追加します(明らかに、「my-project」への参照をプロジェクトの本名に変更します)。

 { "name": "my-project", "version": "0.0.1", "description": "My project" } 

依存関係を追加


これで、モジュールの追加を開始するために必要なすべてが揃いました。 以下の順序でコードの各行を実行します。

 npm install grunt --save-dev npm install time-grunt --save npm install load-grunt-config --save-dev npm install grunt-concurrent --save-dev npm install grunt-contrib-clean --save-dev npm install grunt-contrib-imagemin --save-dev npm install grunt-sass --save-dev npm install grunt-contrib-uglify --save-dev 

package.jsonを見ると、次のようなものが見えるはずです。

 { "name": "my-project", "version": "0.0.1", "description": "My project", "devDependencies": { "grunt": "^0.4.5", "grunt-concurrent": "^1.0.0", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-imagemin": "^0.8.1", "grunt-contrib-uglify": "^0.6.0", "grunt-sass": "^0.16.1", "load-grunt-config": "^0.13.1" }, "dependencies": { "time-grunt": "^1.0.0" } } 

ここにインストールしたもののリストがあります:
grunt :タスクスケジューラ自体。
time-grunt :オプションではあるが素晴らしい追加-各タスクと一般的なアセンブリにかかった時間を示します。
load-grunt-config :メインのgruntfileを短く簡潔に保つことができます。 詳細については、以下をご覧ください。
grunt-concurrent :タスクを同時に実行します。 初期状態では、Gruntは次々にタスクを実行します。実行する必要のあるタスクの量と種類によっては、時間がかかる場合があります。 ただし、他のタスクから独立しており、同時に実行できるタスクが頻繁に発生します。
grunt-contrib-clean :すべてが非常に簡単です。このタスクはゴミを削除します-注意して使用してください!
grunt-contrib-imagemin :以来不可欠 すべての画像を最適化する必要があります。
grunt-sass:SASS / SCSSファイルをCSSにコンパイルします。 注:このモジュールは、より高速ですが実験的なlibsassコンパイラーを使用します。 問題が発生している場合は、安定しているが遅いgrunt-contrib-sassを使用する必要があります。
grunt-contrib-uglify :javascriptを美しくand くします。

タスク設定


私が紹介した最高のモジュールの1つはload-grunt-configです。 これにより、各タスクの設定を個別のファイルに配置できます。 これは、1つの大きなGruntfileにすべての設定を保存するよりもはるかに便利です。
gruntディレクトリに次のファイルを作成します。
 grunt/aliases.yaml grunt/concurrent.js grunt/clean.js grunt/imagemin.js grunt/jshint.js grunt/sass.js grunt/uglify.js grunt/watch.js 

注:これらのファイルの名前は、タスクの名前と一致する必要があります。

以下の各タスクの設定をコピーして、対応するファイルに貼り付けます。

ALIASES.YAML

 default: description: 'Default (production) build' tasks: - prod dev: description: 'Development build' tasks: - 'concurrent:devFirst' - 'concurrent:devSecond' img: description: 'Image tasks' tasks: - 'concurrent:imgFirst' devimg: description: 'Development build and image tasks' tasks: - dev - img prod: description: 'Production build' tasks: - 'concurrent:prodFirst' - 'concurrent:prodSecond' - img 

ここで、タスクのさまざまなエイリアスを定義します。
デフォルト -コマンドラインでgruntが起動されたときにprodタスクを実行します
dev-開発タスクを実行します(イメージタスクは実行しません)。
img-画像タスクを実行します。
devimg-開発およびイメージタスクを実行します。
prod-生産タスクとイメージタスクを実行します。
load-grunt-configを使用したタスクのエイリアス設定の詳細については、 ここをクリックしてください

CONCURRENT.JS

 module.exports = { //  options: { limit: 3 }, //   devFirst: [ 'clean', 'jshint' ], devSecond: [ 'sass:dev', 'uglify' ], //   prodFirst: [ 'clean', 'jshint' ], prodSecond: [ 'sass:prod', 'uglify' ], //   imgFirst: [ 'imagemin' ] }; 

たとえば、開発タスクを実行します。 最初にcleanを実行し、次にsass:devuglifyを同時に実行してcssとjavascriptを復元するように設定されていることがわかります。
grunt-concurrentの設定の詳細については、 ここをクリックしてください

CLEAN.JS

 module.exports = { all: [ "dist/" ] }; 

grunt-contrib-cleanのセットアップは非常に簡単です。 ここで/ distディレクトリの内容全体を削除しました。 このタスクは注意して使用してください-警告なしであなたが言うすべてを無差別に削除します。 ですから、正しく設定してください。
grunt-contrib-cleanの構成の詳細については、 ここをクリックしてください

IMAGEMIN.JS

 module.exports = { all: { files: [{ expand: true, cwd: 'src/', src: ['images/*.{png,jpg,gif}'], dest: 'dist/' }] } }; 

上記の設定は、 src / images /のすべての画像を単純に最適化し、 dist / images /に保存します。
grunt-contrib-imageminの構成の詳細については、 ここをクリックしてください

SASS.JS

 module.exports = { // Development settings dev: { options: { outputStyle: 'nested', sourceMap: true }, files: [{ expand: true, cwd: 'src/styles', src: ['*.scss'], dest: 'dist/styles', ext: '.css' }] }, // Production settings prod: { options: { outputStyle: 'compressed', sourceMap: false }, files: [{ expand: true, cwd: 'src/styles', src: ['*.scss'], dest: 'dist/styles', ext: '.css' }] } }; 

sassタスクを開発プロセスと実動プロセスに分けました。 構成は非常に似ていますが、開発目的のために、出力スタイルを「 ネスト 」に設定し、コードマップを含めました。
grunt-sassの設定の詳細については、 ここをクリックしてください

JSHINT.JS

 module.exports = { options: { reporter: require('jshint-stylish') }, main: [ 'src/scripts/*.js' ] }; 

JShintはjsvascriptをチェックし、すべてが最上位であることを確認します。
grunt-contrib-jshintの設定の詳細については、 ここをクリックしてください

UGLIFY.JS

 module.exports = { all: { files: [{ expand: true, cwd: 'src/scripts', src: '**/*.js', dest: 'dist/scripts', ext: '.min.js' }] } }; 

Uglifyは単純にJavascriptファイルを取得し、それらを縮小します。
grunt-contrib-uglifyの構成の詳細については、 ここをクリックしてください

WATCH.JS

 module.exports = { options: { spawn: false, livereload: true }, scripts: { files: [ 'src/scripts/*.js' ], tasks: [ 'jshint', 'uglify' ] }, styles: { files: [ 'src/styles/*.scss' ], tasks: [ 'sass:dev' ] }, }; 

Watchは、監視するファイルが何らかの方法で変更(追加、削除、編集)されるたびに、これらのタスクを起動します。

注:Livereloadを機能させる最も簡単な方法は、 ブラウザー拡張機能をインストールすることです

grunt-contrib-watchとLivereloadの設定の詳細については、 ここをクリックしてください

タスク起動


上記のようにプロジェクトのセットアップが完了したら、タスクを開始できます。 前に説明したように、実行できるさまざまなタスクエイリアスがあります。 ここで、プロジェクトのルートにあるコマンドラインでgruntと入力します。

すべてがうまくいけば、ブートテキストが画面をスクロールダウンし、次のようなメッセージが表示されます。

グラントタイムが提供する小さな要約が大好きです。 各タスクセットを完了するのにどれだけ時間がかかったかを確認します。 さらに、アセンブリプロセス全体にかかった時間。
ニーズに応じて、 grunt devgrunt devimg 、またはgrunt imgを実行することもできます。

gruntが.sassと.jsの変更を監視し、sassまたはjshintとuglifyを自動的に実行するようにする場合は、 gruntウォッチを実行することもできます。

まとめ


これが実際にすべてです。 上記の内容を試してみると、すぐに自信がつき、要件に応じてタスクの追加とワークフローの改善を開始できます。

繰り返しますが、この記事に添付されているコードはGithubにあります。

Source: https://habr.com/ru/post/J244721/


All Articles