Browse Source

NEW: bundle.js -> new structure, now need two txt files, that is a list of JS and CSS ordered by dependence

Giancarlo 7 years ago
parent
commit
94630c1c8b
4 changed files with 84 additions and 75 deletions
  1. 2 0
      .gitignore
  2. 1 1
      src/OpenMind/Admin/build.css.list
  3. 47 74
      src/OpenMind/Admin/build.js
  4. 34 0
      src/OpenMind/Admin/build.js.list

+ 2 - 0
.gitignore

@@ -52,6 +52,8 @@ src_minified
 import
 import
 
 
 # Custom for current project
 # Custom for current project
+omlink.min.js
+omlink.css
 bundle.js
 bundle.js
 bundle.css
 bundle.css
 /cfg/*.bin
 /cfg/*.bin

+ 1 - 1
src/OpenMind/Admin/build.css.list

@@ -8,7 +8,7 @@ ui/assets/plugins/datatables/responsive.bootstrap4.min.css
 ; Multi Item Selection examples
 ; Multi Item Selection examples
 ui/assets/plugins/datatables/select.bootstrap4.min.css
 ui/assets/plugins/datatables/select.bootstrap4.min.css
 
 
-; App CSs
+; App CSS
 ui/assets/css/bootstrap.min.css
 ui/assets/css/bootstrap.min.css
 ui/assets/css/icons.css
 ui/assets/css/icons.css
 ui/assets/css/style.css
 ui/assets/css/style.css

+ 47 - 74
src/OpenMind/Admin/build.js

@@ -1,106 +1,79 @@
+const BUILD_PATH = 'ui/assets/build';
+const MAIN_SCSS_PATH = 'ui/assets/css/admin.scss';
+
 const MODULES_PATH = '../../../node_modules';
 const MODULES_PATH = '../../../node_modules';
 const compressor = require(`${MODULES_PATH}/node-minify`);
 const compressor = require(`${MODULES_PATH}/node-minify`);
 const sass = require(`${MODULES_PATH}/node-sass`);
 const sass = require(`${MODULES_PATH}/node-sass`);
 const fs = require('fs');
 const fs = require('fs');
-var path = require('path');
-
-
-let listTemp = fs.readFileSync('build.css.list').toString().split("\n");
-let cssList = listTemp.filter((x) => {
-	return x.replace(/^;.*/, '').replace('\r', '').length > 0
-}).map((d) => {
-	return d.replace('\r', '')
-});
-
-let libList = [
-	"ui/assets/js/jquery.min.js",
-	"ui/assets/js/popper.min.js",
-	"ui/assets/js/bootstrap.min.js",
-	"ui/assets/js/waves.js",
-	"ui/assets/js/jquery.slimscroll.js",
-
-	// Required datatable js
-	"ui/assets/plugins/datatables/jquery.dataTables.min.js",
-	"ui/assets/plugins/datatables/dataTables.bootstrap4.min.js",
-
-	//Buttons examples
-	"ui/assets/plugins/datatables/dataTables.buttons.min.js",
-	"ui/assets/plugins/datatables/buttons.bootstrap4.min.js",
-	"ui/assets/plugins/datatables/jszip.min.js",
-	"ui/assets/plugins/datatables/pdfmake.min.js",
-	"ui/assets/plugins/datatables/vfs_fonts.js",
-	"ui/assets/plugins/datatables/buttons.html5.min.js",
-	"ui/assets/plugins/datatables/buttons.print.min.js",
-
-	// Key Tables
-	"ui/assets/plugins/datatables/dataTables.keyTable.min.js",
-
-	// Responsive examples
-	"ui/assets/plugins/datatables/dataTables.responsive.min.js",
-	"ui/assets/plugins/datatables/responsive.bootstrap4.min.js",
-
-	// Selection table
-	"ui/assets/plugins/datatables/dataTables.select.min.js",
-
-	// App js
-	"ui/assets/js/jquery.core.js",
-	"ui/assets/js/jquery.app.js",
-	"ui/assets/js/admin.js",
-];
-
+const path = require('path');
 
 
 /**
 /**
  * Functions
  * Functions
  */
  */
 
 
-/* List all files in a directory recursively in a synchronous fashion.
-*
-* @param {String} dir
-* @returns {IterableIterator<String>}
-*/
-function* walkSync(dir) {
-	const files = fs.readdirSync(dir);
-
-	for (const file of files) {
-		const pathToFile = path.join(dir, file);
-		const isDirectory = fs.statSync(pathToFile).isDirectory();
-		if (isDirectory) {
-			yield* walkSync(pathToFile);
-		} else {
-			yield pathToFile;
-		}
-	}
+/**
+ * Convert each line of text file into item array
+ *
+ * @param listFileName
+ * @returns {string[]}
+ */
+function LoadListIntoArray(listFileName) {
+  // Split every line into array
+  let listTemp = fs.readFileSync(listFileName).toString().split("\n");
+
+  // Clean array:
+  let listRet = listTemp.filter((x) => {
+    // remove all comments start with ';' and empty lines ('\r')
+    return x.replace(/^;.*/, '').replace('\r', '').length > 0
+  }).map((d) => {
+    return d.replace('\r', '')
+  });
+
+  return listRet;
 }
 }
 
 
 /**
 /**
  * MAIN
  * MAIN
  */
  */
 
 
+if (!fs.existsSync(BUILD_PATH)) {
+  console.log(`Create folder ${BUILD_PATH}`);
+  fs.mkdirSync(BUILD_PATH);
+}
+
+let libList = LoadListIntoArray('build.js.list');
+let cssList = LoadListIntoArray('build.css.list');
+
 /**
 /**
  * CSS
  * CSS
  */
  */
 
 
 // Compile SCSS
 // Compile SCSS
-let buffer = sass.renderSync({file: 'ui/assets/css/admin.scss'});
+console.log('Compiling SCSS');
+let buffer = sass.renderSync({file: MAIN_SCSS_PATH});
 // Write to file CSS
 // Write to file CSS
-fs.writeFileSync('ui/assets/build/admin.min.css', buffer.css);
+fs.writeFileSync(`${BUILD_PATH}/admin.min.css`, buffer.css);
 
 
 //Concatenate all CSS in one MIN.CSS file
 //Concatenate all CSS in one MIN.CSS file
+console.log('Bundle CSS');
 compressor.minify({
 compressor.minify({
-		compressor: 'clean-css',
-		input: cssList,
-		output: 'ui/assets/build/bundle.min.css'
-	}
+    compressor: 'clean-css',
+    input: cssList,
+    output: `${BUILD_PATH}/bundle.min.css`
+  }
 );
 );
 
 
 /**
 /**
  * JS
  * JS
  */
  */
-// ..and minify it in one file
 
 
+// Minify+Concatenate JS files it in one file
+console.log('Bundle JS');
 compressor.minify({
 compressor.minify({
-		compressor: 'uglify-es',
-		input: libList,
-		output: 'ui/assets/build/bundle.min.js'
-	}
+    compressor: 'uglify-es',
+    input: libList,
+    output: `${BUILD_PATH}/bundle.min.js`
+  }
 );
 );
+
+console.log('All done.');

+ 34 - 0
src/OpenMind/Admin/build.js.list

@@ -0,0 +1,34 @@
+; Core Libraries
+ui/assets/js/jquery.min.js
+ui/assets/js/popper.min.js
+ui/assets/js/bootstrap.min.js
+ui/assets/js/waves.js
+ui/assets/js/jquery.slimscroll.js
+
+; Required datatable js
+ui/assets/plugins/datatables/jquery.dataTables.min.js
+ui/assets/plugins/datatables/dataTables.bootstrap4.min.js
+
+;Buttons examples
+ui/assets/plugins/datatables/dataTables.buttons.min.js
+ui/assets/plugins/datatables/buttons.bootstrap4.min.js
+ui/assets/plugins/datatables/jszip.min.js
+ui/assets/plugins/datatables/pdfmake.min.js
+ui/assets/plugins/datatables/vfs_fonts.js
+ui/assets/plugins/datatables/buttons.html5.min.js
+ui/assets/plugins/datatables/buttons.print.min.js
+
+; Key Tables
+ui/assets/plugins/datatables/dataTables.keyTable.min.js
+
+; Responsive examples
+ui/assets/plugins/datatables/dataTables.responsive.min.js
+ui/assets/plugins/datatables/responsive.bootstrap4.min.js
+
+; Selection table
+ui/assets/plugins/datatables/dataTables.select.min.js
+
+; App js
+ui/assets/js/jquery.core.js
+ui/assets/js/jquery.app.js
+ui/assets/js/admin.js