この記事では、 Gulpコレクターを使用して、Bitrix cms用に構成されたフロントエンド開発環境を示します。 まず第一に、これは優れたコレクターのフードの下にあるツールのセットであり、これにより日常作業からあなたを救い、開発を大幅に加速します。
判断しないでください
運命が起こったので、CMS 1C-Bitrixに出会いました。 私はそれがいかにかさばって「汚い」かを完全に理解していますが、私はそれが何であるかに対処しなければなりません。 これに基づいて、この記事を批判しないよう強くお願いします。これは主にこのシステムで作業する人を対象としています。
始めましょう
最初に行う必要があるのは、作業環境をセットアップすることです。つまり、nodejsに付属のnpmパッケージマネージャーを取得します。 停止し、若いbitrixoidsを停止します。実行しません。Windowsでもインストールでき、コンソールでも機能します。チェックされています。 また、質問がある場合は、googleが役立ちます(ユーザー環境変数に注意してください。npmコマンドがグローバルになるように、パスのスペルを正しく指定する必要があります)。
npmをインストールすると、必要な依存関係をすべてインストールする機会が得られます。 これを行うには、ファイルを作成します。
package.json
{ "name": "frontend-bitrix", "version": "1.0.0", "description": "", "author": "jmaks", "license": "ISC", "dependencies": { "gulp": "^3.8.11", "gulp-autoprefixer": "^2.1.0", "gulp-minify-css": "^1.0.0", "gulp-rigger": "^0.5.8", "gulp-sass": "^1.3.3", "gulp-uglify": "^1.1.0", "gulp-sourcemaps": "^1.5.0", "gulp-watch": "^4.1.1", "gulp-imagemin": "^2.2.1", "imagemin-pngquant": "^4.0.0", "gulp.spritesmith": "latest", "gulp-plumber": "latest" } }
このファイルには、コレクターに必要なすべてのパッケージのリストが含まれています。詳細を検討してください。
- gulp-コレクター自体
- gulp-autoprefixer-ベンダープレフィックスをCSSプロパティに自動的に追加します
- gulp-minify-css-CSSコード圧縮
- gulp-rigger-シンプルなデザインであるファイルを別のファイルにインポートできます
- gulp-sass-SCSSコードをコンパイルします
- gulp-uglify-JSを圧縮する
- gulp-sourcemaps-コードのデバッグに役立つcss sourscemapsを生成します
- gulp-watch-ファイルの変更を監視する
- gulp-imagemin-画像圧縮
- imagemin-pngquant-画像圧縮| PNGで作業する
- gulp.spritesmith-pngスプライトを作成
- gulp-plumber-エラーをキャッチして、監視が中断しないようにする
Bowerのような優れたパッケージマネージャーも必要です。 最初にnpmを使用してインストールし(bowerのインストールは依存関係のインストールとは別に、bowerをグローバルにインストールする必要があるため)、次に同じ方法で設定ファイルを作成します。
bower.json
{ "name": "frontend-bitrix", "version": "0.0.1", "authors": [ "jmaks1 <my.mailname@mail.ru>" ], "license": "MIT", "ignore": [ "**/.*", "node_modules", "bower_components", "test", "tests" ], "dependencies": { "jquery": "2.*", "bootstrap-sass": "*" } }
ここでは、すべてがpackage.jsonに似ています。ダウンロード可能なパッケージのリストを含む依存関係ブロックがあります。 ここで、jqueryとbootstrap-sassをロードします。
すでにお気付きのように、私はたくさんのブートストラップとcss sassプリプロセッサを使用しています。
最初の点-ブートストラップでは、1C-Bitrix自体が徐々にこのCSSフレームワークを使用し始めているという事実を考慮して使用します(まあ、私はすでに慣れています)。
2番目のポイント-Sass。 このプリプロセッサは、私が本当に気に入っていた後者よりも機能的ですが、彼はSassと競合できませんでした。
新しいプロジェクト構造を作成する
新しいストア/ポータル/「Bitrix上の他の何か」を作成するローカルサーバーに必要なBitrixのエディションをインストールします。 インストール中に、開始テンプレートから既製のテンプレートを選択し、デモデータでサイトが乱雑にならないようにインストールウィザードを単にキャンセルします。その結果、次のサイト構造が得られます。
auth
ビトリックス
アップロードする
次に、ビルドファイルと開発ファイルのセクションを作成します。 ビルドはサイトテンプレートであり、すべてのファイルがその中に収集されます。/local/ディレクトリに配置する必要があります。 タンクにいる人のために-このディレクトリは/ bitix /と同等です。つまり、コンポーネントやテンプレートなどを作成できます。 / src /ディレクトリで開発を行い、その中に単純な構造を作成します。
その結果、以下が得られます。
auth
ビトリックス
アップロードする
ローカル
-テンプレート
--メイン
src
-フォント
-画像
-スプライト
-js
--パーシャル
-スタイル
--パーシャル
ここではすべてが簡単です。
ローカルディレクトリには、基本的なサイトテンプレートmainが含まれています。
srcディレクトリには次が含まれます。
- フォント-フォント
- 画像-写真
- スプライト-スプライトのアイコン
- js-スクリプト。 このフォルダのルートにあるscript.jsファイルは、アセンブリに便利です。
- スタイル-スタイル。 ここでも、template_styles.scssのルートにあります。
partialsディレクトリのファイルはどちらの場合も追加されます。それぞれメインファイルに含めるだけで、script.jsではすべてのスクリプトを接続し、template_styles.scssでは追加のスタイルファイルをすべて追加します。
script.jsの// =コンストラクトにファイルを含めます。
// include jquery //= ../../bower_components/jquery/dist/jquery.min.js // include bootstrap.js //= ../../bower_components/bootstrap-sass/assets/javascripts/bootstrap.min.js console.log("i'm a live!"); // another scripts //= partials/app.js
@importを使用してscssファイルを接続します。
// include bootstrap sass @import "../../bower_components/bootstrap-sass/assets/stylesheets/bootstrap"; // include variables @import "partials/variables"; // include sprite @import "partials/sprite"; // include mixin @import "partials/mixin"; // include fonts @import "partials/fonts";
プロジェクト構造を受け取ったら 、 bower.jsonおよびpackage.jsonファイルをそのルートに追加します。 コレクターの設定ファイルgulpfile.jsを作成することのみが残ります。 このファイルは、すべての魔法を担当します。
gulpfile.js
package.jsonファイルに登録したすべての依存関係は、 gulpfile.js内で接続されています 。
'use strict'; var gulp = require('gulp'), watch = require('gulp-watch'), prefixer = require('gulp-autoprefixer'), uglify = require('gulp-uglify'), rigger = require('gulp-rigger'), sass = require('gulp-sass'), sourcemaps = require('gulp-sourcemaps'), cssmin = require('gulp-minify-css'), imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'), spritesmith = require('gulp.spritesmith'), plumber = require('gulp-plumber');
必要に応じて1か所で簡単に編集できるように、すべてのパスでパスオブジェクトを作成します。 それらはタスクによって使用されます(タスクはタスクであり、マネージャーにタスクを設定し、彼はすべてをすばやく実行します)。
var path = { build: { js: 'local/templates/main/', css: 'local/templates/main/', images: 'local/templates/main/images/', fonts: 'local/templates/main/fonts/', fontsBootstrap:'local/templates/main/fonts/bootstrap/' }, src: { js: 'src/js/script.js', styles: 'src/styles/template_styles.scss', stylesPartials:'src/styles/partials/', spriteTemplate:'src/sass.template.mustache', images: 'src/images/**/*.*', sprite: 'src/sprite/*.*', fonts: 'src/fonts/**/*.*', fontsBootstrap:'bower_components/bootstrap-sass/assets/fonts/bootstrap/*.*' }, watch: { js: 'src/js/**/*.js', styles:'src/styles/**/*.scss', images:'src/images/**/*.*', sprite:'src/sprite/*.*', fonts: 'src/fonts/**/*.*' } };
すべての依存関係を接続し、ルートを作成したら、コレクターのすべての作業を担当するタスクを作成します。
JSファイルコレクター
gulp.task('js:build', function () { gulp.src(path.src.js) // main .pipe(plumber()) .pipe(rigger()) // rigger .pipe(sourcemaps.init()) // sourcemap .pipe(uglify()) // js .pipe(sourcemaps.write()) // .pipe(plumber.stop()) .pipe(gulp.dest(path.build.js)) // build });
Cssファイルコレクター
gulp.task('styles:build', function () { gulp.src(path.src.styles) // main.scss .pipe(plumber()) .pipe(sourcemaps.init()) // js .pipe(sass()) // .pipe(prefixer()) // .pipe(cssmin()) // .pipe(sourcemaps.write()) // .pipe(plumber.stop()) .pipe(gulp.dest(path.build.css)) // build });
すべての画像の圧縮を担当するタスク
gulp.task('image:build', function () { gulp.src(path.src.images) // .pipe(plumber()) .pipe(imagemin({ // progressive: true, svgoPlugins: [{removeViewBox: false}], use: [pngquant()], interlaced: true })) .pipe(plumber.stop()) .pipe(gulp.dest(path.build.images)) });
タスク収集スプライト
スプライトフォルダーからすべてのアイコンを取得し、sass.template.mustacheファイルに基づいて並行してスプライトを生成し、アイコンのすべてのサイズと位置が書き込まれるscssファイルを作成します。
gulp.task('sprite:build', function() { var spriteData = gulp.src(path.src.sprite) .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.scss', cssFormat: 'scss', algorithm: 'binary-tree', padding: 20, cssTemplate: path.src.spriteTemplate, cssVarMap: function(sprite) { sprite.name = 's-' + sprite.name } })); spriteData.img.pipe(gulp.dest(path.build.images)); spriteData.css.pipe(gulp.dest(path.src.stylesPartials)); });
スプライトフォルダーからすべてのアイコンを取得し、sass.template.mustacheファイルに基づいて並行してスプライトを生成し、アイコンのすべてのサイズと位置が書き込まれるscssファイルを作成します。
sass.template.mustache
{{#items}} ${{name}}: {{px.x}}, {{px.y}}, {{px.offset_x}}, {{px.offset_y}}, {{px.width}}, {{px.height}}, {{px.total_width}}, {{px.total_height}}, '{{{escaped_image}}}'; {{/items}}
フォントを転送してビルドする
// bootstrap', gulp.task('icons:build', function() { gulp.src(path.src.fontsBootstrap) .pipe(gulp.dest(path.build.fontsBootstrap)); }); // src gulp.task('fonts:build', function() { gulp.src(path.src.fonts) .pipe(gulp.dest(path.build.fonts)) });
最後の2つのタスクを作成し、すべての作業を開始します。 1つ目は実行に、2つ目はファイルの変更を監視するために必要です。そのため、常にマネージャーを再起動する必要はありません。
gulp.task('build', [ 'js:build', 'sprite:build', 'icons:build', 'fonts:build', 'styles:build', 'image:build', ]); gulp.task('watch', function(){ watch([path.watch.js], function(event, cb) { gulp.start('js:build'); }); watch([path.watch.sprite], function(event, cb) { gulp.start('sprite:build'); }); watch([path.watch.styles], function(event, cb) { gulp.start('styles:build'); }); watch([path.watch.fonts], function(event, cb) { gulp.start('fonts:build'); }); watch([path.watch.images], function(event, cb) { gulp.start('image:build'); }); }); gulp.task('default', ['build', 'watch']);
その結果、プロジェクトのルートに3つの構成ファイルを取得し、コンソールでコマンドを記述して実行します。
- npm install-gulpが必要とするすべての依存関係がインストールされます(node_modulesディレクトリが作成されます)
- bower install-サイトのプラグインをインストールします(bower_componentsディレクトリが作成されます)
- gulp-コレクターを実行します
利益!
まとめ
ローンチが成功した後、便利な開発環境ができました。 ファイルの圧縮バージョン(スクリプト、スタイル、画像)がテンプレートに自動的に生成されます。 Githubから構成済みのバージョンをダウンロードします。 アーカイブを新しいサイトのあるディレクトリに解凍し、コンソールからコマンドを実行するだけで十分です。
落とし穴
サイトのバックアップコピーを作成する前に、ディレクトリnode_modulesおよびbower_componentsに例外を置くことを忘れないでください。そうしないと、バックアップコピーは作成されません。 これらのフォルダーは開発にのみ必要であり、サイトの「戦闘」バージョンでは必要ありません。
PS
この記事は、「 フロントエンドプロジェクトの快適な組み立て 」という記事に由来しています-よく理解しておくことをお勧めします。
興味がある人は、svgスプライト生成をコレクターに追加できます。