|
| 1 | +const gulp = require ("gulp") |
| 2 | +const concat = require ("gulp-concat") |
| 3 | +const gzip = require ("gulp-gzip") |
| 4 | +const magepack = require ("gulp-magepack") |
| 5 | +const minify = require ("gulp-minify-css") |
| 6 | +const minifyJs = require ("gulp-minify") |
| 7 | +const replace = require ("gulp-replace") |
| 8 | +const sass = require ("gulp-sass") |
| 9 | +const tar = require ("gulp-tar") |
| 10 | +const fs = require ("fs") |
| 11 | +const fse = require ("fs-extra") |
| 12 | +const path = require ("path") |
| 13 | +const webpack = require ("webpack") |
| 14 | +const webpackStream = require ("webpack-stream") |
| 15 | + |
| 16 | +const PACKAGE_NAMESPACE = require ("./package.json").namespace |
| 17 | +const PACKAGE_VERSION = require ("./package.json").version |
| 18 | +const PACKAGE_PATH = PACKAGE_NAMESPACE.replace ( /_/g, "/" ) |
| 19 | + |
| 20 | +const SOURCE_DIR = "src" |
| 21 | +const BUILD_DIR = "build" |
| 22 | +const STAGING_DIR = "public_html" |
| 23 | +const PACKAGE_DIR = "dist" |
| 24 | + |
| 25 | +gulp.task ( "init", [], ( callback ) => { |
| 26 | + let mkdirNotExists = ( name ) => { |
| 27 | + if ( !fs.existsSync ( name ) ) { |
| 28 | + fs.mkdirSync ( name ) |
| 29 | + } |
| 30 | + } |
| 31 | + mkdirNotExists ( BUILD_DIR ) |
| 32 | + mkdirNotExists ( PACKAGE_DIR ) |
| 33 | + mkdirNotExists ( STAGING_DIR ) |
| 34 | + callback () |
| 35 | +}) |
| 36 | + |
| 37 | +gulp.task ( "clean", [], ( callback ) => { |
| 38 | + let unlinkExists = ( name ) => { |
| 39 | + if ( fs.existsSync ( name ) ) { |
| 40 | + fse.removeSync ( name ) |
| 41 | + } |
| 42 | + } |
| 43 | + unlinkExists ( BUILD_DIR ) |
| 44 | + unlinkExists ( PACKAGE_DIR ) |
| 45 | + callback () |
| 46 | +}) |
| 47 | + |
| 48 | +gulp.task ( "bump", [], ( callback ) => { |
| 49 | + return gulp.src (`${SOURCE_DIR}/**/*`) |
| 50 | + .pipe ( replace ( /(^.*\*\s+@version\s+)(.+$)/gm, "$1" + PACKAGE_VERSION ) ) |
| 51 | + .pipe ( gulp.dest ( SOURCE_DIR ) ) |
| 52 | + .on ( "done", callback ) |
| 53 | +}) |
| 54 | + |
| 55 | +gulp.task ( "build-styles", ["init"], ( callback ) => { |
| 56 | + return gulp.src (`${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss/index.scss`) |
| 57 | + .pipe ( sass ({ includePaths: `${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss` }) ) |
| 58 | + .pipe ( minify () ) |
| 59 | + .pipe ( concat ("bundle.min.css") ) |
| 60 | + .pipe ( gulp.dest (`${BUILD_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/css`) ) |
| 61 | + .pipe ( gulp.dest (`${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/css`) ) |
| 62 | + .on ( "done", callback ) |
| 63 | +}) |
| 64 | + |
| 65 | +gulp.task ( "build-scripts", ["init"], ( callback ) => { |
| 66 | + return gulp.src (`${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/js/index.js`) |
| 67 | + .pipe ( webpackStream ( require ("./webpack.config.js") ), webpack ) |
| 68 | + .pipe ( minifyJs ({ ext: { min: ".min.js" } }) ) |
| 69 | + .pipe ( gulp.dest (`${BUILD_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/js`) ) |
| 70 | + .pipe ( gulp.dest (`${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/js`) ) |
| 71 | + .on ( "done", callback ) |
| 72 | +}) |
| 73 | + |
| 74 | +gulp.task ( "build", [ "build-styles", "build-scripts" ], ( callback ) => { |
| 75 | + let ignoreJs = [ |
| 76 | + `!${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/js`, |
| 77 | + `!${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/js/**/*`, |
| 78 | + ] |
| 79 | + let ignoreCss = [ |
| 80 | + `!${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss`, |
| 81 | + `!${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss/**/*`, |
| 82 | + `${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss/fonts/**/*` |
| 83 | + ] |
| 84 | + return gulp.src ( [`${SOURCE_DIR}/**`].concat ( ignoreJs ).concat ( ignoreCss ) ) |
| 85 | + .pipe ( gulp.dest ( BUILD_DIR ) ) |
| 86 | + .on ( "end", () => { |
| 87 | + fse.copySync ( |
| 88 | + `${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss/fonts`, |
| 89 | + `${BUILD_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/css/fonts` |
| 90 | + ) |
| 91 | + fse.copySync ( |
| 92 | + `${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/scss/fonts`, |
| 93 | + `${SOURCE_DIR}/app/code/${PACKAGE_PATH}/view/adminhtml/web/css/fonts` |
| 94 | + ) |
| 95 | + }) |
| 96 | + .on ( "done", callback ) |
| 97 | +}) |
| 98 | + |
| 99 | +gulp.task ( "deploy", ["build"], ( callback ) => { |
| 100 | + return gulp.src (`${BUILD_DIR}/**/*`) |
| 101 | + .pipe ( gulp.dest ( STAGING_DIR ) ) |
| 102 | + .on ( "done", callback ) |
| 103 | +}) |
| 104 | + |
| 105 | +gulp.task ( "watch", ["deploy"], () => { |
| 106 | + return gulp.watch ( `${SOURCE_DIR}/**/*`, ["deploy"] ) |
| 107 | +}) |
| 108 | + |
| 109 | +gulp.task ( "package", [ "clean", "bump", "build" ], ( callback ) => { |
| 110 | + let options = { |
| 111 | + "template": "conf/package.xml", |
| 112 | + "version": PACKAGE_VERSION |
| 113 | + } |
| 114 | + gulp.src (`${BUILD_DIR}/**/*`) |
| 115 | + .pipe ( magepack ( options ) ) |
| 116 | + .pipe ( tar (`${PACKAGE_NAMESPACE}-${PACKAGE_VERSION}`) ) |
| 117 | + .pipe ( gzip ({ extension: "tgz" }) ) |
| 118 | + .pipe ( gulp.dest ( PACKAGE_DIR ) ) |
| 119 | + .on ( "done", callback ) |
| 120 | +}) |
0 commit comments