| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /**
- * @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',
- baseUrl: tmp + '/ckeditor5-core/src/',
- paths: {
- 'ckeditor': '../../../ckeditor',
- 'ckeditor-dev': '../../../src/ckeditor-dev',
- 'ckeditor-core': 'ckeditor'
- // depTree: '../../../lib/depTree',
- // plugins: '../../../lib/plugins'
- },
- // include: ['depTree', 'ckeditor' ].concat( getPlugins() ),
- include: [ 'ckeditor' ],
- stubModules: [ 'ckeditor-dev' ],
- // onBuildWrite: replacePaths,
- // optimize: 'none',
- optimize: 'uglify2',
- //uglify2: {
- // output: {
- // beautify: true
- // },
- // mangle: false
- //},
- preserveLicenseComments: false,
- wrap: {
- startFile: [ 'dev/tasks/build/start.frag', require.resolve( 'almond' ) ],
- endFile: 'dev/tasks/build/end.frag'
- }
- };
- requirejs.optimize( config, function() {
- callback();
- } );
- }
- function cleanupTmp( callback ) {
- var del = require( 'del' );
- del.sync( tmp );
- return callback();
- }
- };
|