8
0
Quellcode durchsuchen

Introduced "grunt build".

fredck vor 11 Jahren
Ursprung
Commit
a3a49561f7
4 geänderte Dateien mit 182 neuen und 1 gelöschten Zeilen
  1. 152 0
      dev/tasks/build.js
  2. 12 0
      dev/tasks/build/end.frag
  3. 13 0
      dev/tasks/build/start.frag
  4. 5 1
      package.json

+ 152 - 0
dev/tasks/build.js

@@ -0,0 +1,152 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* jshint node: true */
+
+'use strict';
+
+module.exports = function( grunt ) {
+	grunt.registerTask( 'build', 'Build a release out of the current development code.', function() {
+		var done = this.async();
+		module.exports.build( done );
+	} );
+};
+
+// Exports the build method so it can be used from plain node code as well.
+module.exports.build = function( done ) {
+	var target = 'build';
+	var tmp = 'tmp';
+	var stepCounter = 0;
+
+	var tasks = [
+		[ cleanup, 'Cleaning the "' + target + '" directory...' ],
+		[ copyToTmp, 'Copying source files for manipulation...' ],
+		[ removeAmdNamespace, 'AMD cleanup...' ],
+		[ optimize, 'Creating the optimized code...' ],
+		[ cleanupTmp, 'Removing the "' + tmp + '" directory...' ]
+	];
+
+	runNext();
+
+	function runNext() {
+		var next = tasks.shift();
+
+		if ( next ) {
+			stepCounter++;
+			console.log( stepCounter + '. ' + next[ 1 ] );
+			next[ 0 ]( runNext );
+		} else {
+			if ( done ) {
+				done();
+			}
+		}
+	}
+
+	function cleanup( callback ) {
+		var del = require( 'del' );
+		del.sync( target );
+		del.sync( tmp );
+
+		return callback();
+	}
+
+	function copyToTmp( callback ) {
+		var ncp = require( 'ncp' ).ncp;
+		var path = require( 'path' );
+		var fs = require( 'fs' );
+
+		var deps = JSON.parse( fs.readFileSync( 'package.json', 'utf8' ) ).dependencies;
+
+		var toCopy = Object.keys( deps ).filter( function( name ) {
+				return name.indexOf( 'ckeditor5-' ) === 0;
+			} );
+
+		if ( !fs.existsSync( tmp ) ) {
+			fs.mkdirSync( tmp );
+		}
+
+		function copy() {
+			var module = toCopy.shift();
+
+			if ( !module ) {
+				return callback();
+			}
+
+			var dest = path.join( tmp + '/', module );
+
+			if ( !fs.existsSync( dest ) ) {
+				fs.mkdirSync( dest );
+			}
+
+			// Copy the "src" directory only.
+			ncp( path.join( 'node_modules', module, 'src' ), path.join( dest, 'src' ), {
+				dereference: true
+			}, function( err ) {
+				if ( err ) {
+					throw( err );
+				}
+
+				copy();
+			} );
+		}
+
+		copy();
+	}
+
+	function removeAmdNamespace( callback ) {
+		var replace = require( 'replace' );
+
+		replace( {
+			regex: /^\s*CKEDITOR\.(define|require)/mg,
+			replacement: '$1',
+			paths: [ 'tmp' ],
+			recursive: true,
+			silent: true
+		} );
+
+		callback();
+	}
+
+	function optimize( callback ) {
+		var requirejs = require( 'requirejs' );
+
+		var config = {
+			out: target + '/ckeditor.js',
+
+			almond: true,
+			baseUrl: tmp + '/ckeditor5-core/src/',
+			generateSourceMaps: false,
+			preserveLicenseComments: false,
+			include: [ 'ckeditor' ],
+//			include: ['depTree', 'ckeditor' ].concat( getPlugins() ),
+//			paths: {
+//				depTree: '../../../lib/depTree',
+//				plugins: '../../../lib/plugins'
+//			},
+//			optimize: 'uglify2',
+			optimize: 'none',
+//			onBuildWrite: replacePaths,
+//			stubModules: [ 'plugins' ],
+			useStrict: true,
+			wrap: {
+				startFile: 'dev/tasks/build/start.frag',
+				endFile: 'dev/tasks/build/end.frag'
+			}
+		};
+
+		requirejs.optimize( config, function() {
+			callback();
+		}, function( err ) {
+			throw err;
+		} );
+	}
+
+	function cleanupTmp( callback ) {
+		var del = require( 'del' );
+		del.sync( tmp );
+
+		return callback();
+	}
+};

+ 12 - 0
dev/tasks/build/end.frag

@@ -0,0 +1,12 @@
+/************************ end.frag START */
+
+	var CKEDITOR = require( 'ckeditor' );
+
+	CKEDITOR._dependencyTree = dependencyTree || {};
+
+	// Setup the AMD API to use Almond.
+	CKEDITOR.define = define;
+	CKEDITOR.require = require;
+
+	return CKEDITOR;
+} );

+ 13 - 0
dev/tasks/build/start.frag

@@ -0,0 +1,13 @@
+( function ( root, factory ) {
+	// Register the CKEDITOR global.
+	root.CKEDITOR = factory();
+
+	// Make the build an AMD module.
+	if ( typeof define == 'function' && define.amd ) {
+		define( [], function() {
+			return root.CKEDITOR;
+		} );
+	}
+} )( this, function () {
+
+/************************ start.frag END */

+ 5 - 1
package.json

@@ -8,9 +8,13 @@
     "WYSIWYG"
   ],
   "dependencies": {
-    "ckeditor-core": "ckeditor/ckeditor5-core"
+    "ckeditor5-core": "ckeditor/ckeditor5-core"
   },
   "devDependencies": {
+    "del": "~1.1",
+    "requirejs": "~2.1",
+    "ncp": "~1.0",
+    "replace": "~0.3.0",
     "grunt": "~0",
     "grunt-jscs": "~1",
     "grunt-contrib-jshint": "~0",