diff --git Gruntfile.js Gruntfile.js
index 0dc8b7f..9a3e4a2 100644
|
|
module.exports = function(grunt) { |
12 | 12 | BANNER_TEXT = '/*! This file is auto-generated */', |
13 | 13 | autoprefixer = require( 'autoprefixer' ), |
14 | 14 | phpUnitWatchGroup = grunt.option( 'group' ), |
| 15 | themeFiles = [ |
| 16 | 'wp-content/themes/index.php', |
| 17 | 'wp-content/themes/twenty*/**' |
| 18 | ], |
15 | 19 | buildFiles = [ |
16 | 20 | '*.php', |
17 | 21 | '*.txt', |
… |
… |
module.exports = function(grunt) { |
19 | 23 | 'wp-includes/**', // Include everything in wp-includes. |
20 | 24 | 'wp-admin/**', // Include everything in wp-admin. |
21 | 25 | 'wp-content/index.php', |
22 | | 'wp-content/themes/index.php', |
23 | | 'wp-content/themes/twenty*/**', |
24 | 26 | 'wp-content/plugins/index.php', |
25 | 27 | 'wp-content/plugins/hello.php', |
26 | 28 | 'wp-content/plugins/akismet/**' |
27 | | ], |
| 29 | ].concat( themeFiles ), |
28 | 30 | cleanFiles = []; |
29 | 31 | |
30 | 32 | buildFiles.forEach( function( buildFile ) { |
… |
… |
module.exports = function(grunt) { |
124 | 126 | ] |
125 | 127 | } |
126 | 128 | }, |
| 129 | symlink: { |
| 130 | expanded: { |
| 131 | files: [ |
| 132 | { |
| 133 | expand: true, |
| 134 | overwrite: true, |
| 135 | cwd: SOURCE_DIR, |
| 136 | src: [ |
| 137 | 'wp-admin/*', |
| 138 | 'wp-content/uploads/', |
| 139 | 'wp-content/index.php', |
| 140 | 'wp-content/plugins/*', |
| 141 | 'wp-includes/*', |
| 142 | '*.php', |
| 143 | '*.txt', |
| 144 | '*.html', |
| 145 | '!wp-admin/css', |
| 146 | '!wp-content/themes', |
| 147 | '!wp-includes/css', |
| 148 | '!wp-includes/version.php', // Exclude version.php |
| 149 | '!wp-includes/formatting.php', // Exclude formatting.php |
| 150 | '!wp-includes/embed.php', // Exclude formatting.php |
| 151 | '!index.php', '!wp-admin/index.php', |
| 152 | '!_index.php', '!wp-admin/_index.php' |
| 153 | ], |
| 154 | dest: BUILD_DIR |
| 155 | }, |
| 156 | { |
| 157 | 'build/wp-config-sample.php': ['wp-config-sample.php'], |
| 158 | 'build/index.php': ['src/_index.php'], |
| 159 | 'build/wp-admin/index.php': ['src/wp-admin/_index.php'] |
| 160 | } |
| 161 | ] |
| 162 | } |
| 163 | }, |
127 | 164 | copy: { |
128 | 165 | files: { |
129 | 166 | files: [ |
… |
… |
module.exports = function(grunt) { |
135 | 172 | '!js/**', // JavaScript is extracted into separate copy tasks. |
136 | 173 | '!.{svn,git}', // Exclude version control folders. |
137 | 174 | '!wp-includes/version.php', // Exclude version.php |
| 175 | '!wp-admin/css/**/*', // Exclude the CSS |
| 176 | '!wp-includes/css/**/*', // Exclude the CSS |
138 | 177 | '!index.php', '!wp-admin/index.php', |
139 | 178 | '!_index.php', '!wp-admin/_index.php' |
140 | 179 | ] ), |
… |
… |
module.exports = function(grunt) { |
150 | 189 | } |
151 | 190 | ] |
152 | 191 | }, |
| 192 | css: { |
| 193 | dot: true, |
| 194 | expand: true, |
| 195 | cwd: SOURCE_DIR, |
| 196 | src: [ |
| 197 | 'wp-admin/**/*.css', |
| 198 | 'wp-includes/**/*.css' |
| 199 | ], |
| 200 | dest: BUILD_DIR |
| 201 | }, |
| 202 | themes: { |
| 203 | dot: true, |
| 204 | expand: true, |
| 205 | cwd: SOURCE_DIR, |
| 206 | src: themeFiles, |
| 207 | dest: BUILD_DIR |
| 208 | }, |
153 | 209 | 'npm-packages': { |
154 | 210 | files: { |
155 | 211 | 'build/wp-includes/js/backbone.js': ['./node_modules/backbone/backbone.js'], |
… |
… |
module.exports = function(grunt) { |
338 | 394 | src: SOURCE_DIR + 'wp-includes/version.php', |
339 | 395 | dest: BUILD_DIR + 'wp-includes/version.php' |
340 | 396 | }, |
| 397 | 'php-buildFiles': { |
| 398 | files: { |
| 399 | 'build/wp-includes/formatting.php': ['src/wp-includes/formatting.php'], |
| 400 | 'build/wp-includes/embed.php': ['src/wp-includes/embed.php'], |
| 401 | } |
| 402 | }, |
341 | 403 | dynamic: { |
342 | 404 | dot: true, |
343 | 405 | expand: true, |
… |
… |
module.exports = function(grunt) { |
1153 | 1215 | |
1154 | 1216 | grunt.registerTask( 'watch', function() { |
1155 | 1217 | if ( ! this.args.length || this.args.indexOf( 'webpack' ) > -1 ) { |
1156 | | grunt.task.run( 'build' ); |
| 1218 | grunt.task.run( 'build:dev' ); |
1157 | 1219 | } |
1158 | 1220 | |
1159 | 1221 | if ( 'watch:phpunit' === grunt.cli.tasks[ 0 ] || 'undefined' !== typeof grunt.option( 'phpunit' ) ) { |
… |
… |
module.exports = function(grunt) { |
1281 | 1343 | } |
1282 | 1344 | } ); |
1283 | 1345 | |
| 1346 | grunt.registerTask( 'uglify:all', [ |
| 1347 | 'uglify:core', |
| 1348 | 'uglify:embed', |
| 1349 | 'uglify:jqueryui', |
| 1350 | 'uglify:imgareaselect' |
| 1351 | ] ); |
| 1352 | |
1284 | 1353 | grunt.registerTask( 'copy:js', [ |
1285 | 1354 | 'copy:npm-packages', |
1286 | 1355 | 'copy:vendor-js', |
… |
… |
module.exports = function(grunt) { |
1288 | 1357 | 'copy:includes-js' |
1289 | 1358 | ] ); |
1290 | 1359 | |
1291 | | grunt.registerTask( 'uglify:all', [ |
1292 | | 'uglify:core', |
1293 | | 'uglify:embed', |
1294 | | 'uglify:jqueryui', |
1295 | | 'uglify:imgareaselect' |
| 1360 | grunt.registerTask( 'copyOrSymlink', function() { |
| 1361 | var task = grunt.option( 'symlink' ) === true ? 'symlink:expanded' : 'copy:files'; |
| 1362 | grunt.task.run( task ); |
| 1363 | } ); |
| 1364 | |
| 1365 | grunt.registerTask( 'copy:all', [ |
| 1366 | 'copyOrSymlink', |
| 1367 | 'copy:php-buildFiles', |
| 1368 | 'copy:css', |
| 1369 | 'copy:themes', |
| 1370 | 'copy:wp-admin-css-compat-rtl', |
| 1371 | 'copy:wp-admin-css-compat-min', |
| 1372 | 'copy:version', |
| 1373 | 'copy:js' |
1296 | 1374 | ] ); |
1297 | 1375 | |
1298 | 1376 | grunt.registerTask( 'build:tinymce', [ |
… |
… |
module.exports = function(grunt) { |
1312 | 1390 | 'jsvalidate:build' |
1313 | 1391 | ] ); |
1314 | 1392 | |
1315 | | grunt.registerTask( 'copy:all', [ |
1316 | | 'copy:files', |
1317 | | 'copy:wp-admin-css-compat-rtl', |
1318 | | 'copy:wp-admin-css-compat-min', |
1319 | | 'copy:version', |
1320 | | 'copy:js' |
1321 | | ] ); |
| 1393 | grunt.registerTask( 'clean-all', function() { |
| 1394 | if ( grunt.option( 'symlink' ) === true ) { |
| 1395 | // clean all symlinks |
| 1396 | try { |
| 1397 | var delSymlinks = require('del-symlinks'); |
| 1398 | |
| 1399 | var result = delSymlinks.sync(['./build/**']); |
| 1400 | grunt.log.writeln( '>> ' + result.length + ' symlinks cleaned.' ); |
| 1401 | } catch ( e ) { |
| 1402 | grunt.verbose.error( 'Error:', e.message ); |
| 1403 | grunt.fail.warn( "Failed to delete symlinks. If you're on Windows, " + |
| 1404 | "running as administrator could resolve this issue."); |
| 1405 | } |
| 1406 | } |
| 1407 | |
| 1408 | grunt.task.run( 'clean:all' ); |
| 1409 | } ); |
1322 | 1410 | |
1323 | | grunt.registerTask( 'build', [ |
1324 | | 'clean:all', |
| 1411 | grunt.registerTask( 'build:all', [ |
| 1412 | 'clean-all', |
1325 | 1413 | 'webpack:dev', |
1326 | 1414 | 'copy:all', |
1327 | 1415 | 'file_append', |
… |
… |
module.exports = function(grunt) { |
1339 | 1427 | 'jsvalidate:build' |
1340 | 1428 | ] ); |
1341 | 1429 | |
| 1430 | grunt.registerTask( 'build', function() { |
| 1431 | grunt.task.run( 'build:all' ); |
| 1432 | } ); |
| 1433 | |
| 1434 | grunt.registerTask( 'build:dev', function() { |
| 1435 | try { |
| 1436 | // Try creating a symlink. |
| 1437 | fs.symlinkSync( './symlink', './symlinktest'); |
| 1438 | grunt.option( 'symlink', true ); |
| 1439 | // If succeeded, remove it again. |
| 1440 | fs.unlinkSync( './symlinktest' ); |
| 1441 | } catch( e ) { |
| 1442 | grunt.verbose.error( 'Error:', e.message ); |
| 1443 | grunt.log.error( "Failed to delete symlinks. Falling back to copying " + |
| 1444 | "files instead. If you're on Windows, " + |
| 1445 | "running as administrator could resolve this issue."); |
| 1446 | } finally { |
| 1447 | grunt.task.run( 'build:all' ); |
| 1448 | } |
| 1449 | } ); |
| 1450 | |
1342 | 1451 | grunt.registerTask( 'prerelease', [ |
1343 | 1452 | 'precommit:php', |
1344 | 1453 | 'precommit:js', |
diff --git package-lock.json package-lock.json
index 3f81fc7..3cbb62c 100644
|
|
|
653 | 653 | "version": "1.0.2", |
654 | 654 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", |
655 | 655 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", |
656 | | "dev": true, |
657 | 656 | "requires": { |
658 | 657 | "array-uniq": "^1.0.1" |
659 | 658 | } |
… |
… |
|
661 | 660 | "array-uniq": { |
662 | 661 | "version": "1.0.3", |
663 | 662 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", |
664 | | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", |
665 | | "dev": true |
| 663 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" |
666 | 664 | }, |
667 | 665 | "array-unique": { |
668 | 666 | "version": "0.2.1", |
… |
… |
|
788 | 786 | "balanced-match": { |
789 | 787 | "version": "1.0.0", |
790 | 788 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", |
791 | | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", |
792 | | "dev": true |
| 789 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" |
793 | 790 | }, |
794 | 791 | "base": { |
795 | 792 | "version": "0.11.2", |
… |
… |
|
1040 | 1037 | "version": "1.1.11", |
1041 | 1038 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
1042 | 1039 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |
1043 | | "dev": true, |
1044 | 1040 | "requires": { |
1045 | 1041 | "balanced-match": "^1.0.0", |
1046 | 1042 | "concat-map": "0.0.1" |
… |
… |
|
1825 | 1821 | "concat-map": { |
1826 | 1822 | "version": "0.0.1", |
1827 | 1823 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", |
1828 | | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", |
1829 | | "dev": true |
| 1824 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" |
1830 | 1825 | }, |
1831 | 1826 | "concat-stream": { |
1832 | 1827 | "version": "1.6.1", |
… |
… |
|
2368 | 2363 | } |
2369 | 2364 | } |
2370 | 2365 | }, |
| 2366 | "del-symlinks": { |
| 2367 | "version": "0.1.2", |
| 2368 | "resolved": "https://registry.npmjs.org/del-symlinks/-/del-symlinks-0.1.2.tgz", |
| 2369 | "integrity": "sha1-rE/ePWow7Xk23QMH8APLtTUkP2U=", |
| 2370 | "requires": { |
| 2371 | "get-symlinks": "^1.0.0", |
| 2372 | "object-assign": "^4.1.0", |
| 2373 | "pify": "^2.3.0", |
| 2374 | "pinkie-promise": "^2.0.1" |
| 2375 | } |
| 2376 | }, |
2371 | 2377 | "delayed-stream": { |
2372 | 2378 | "version": "1.0.0", |
2373 | 2379 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", |
… |
… |
|
3497 | 3503 | "fs.realpath": { |
3498 | 3504 | "version": "1.0.0", |
3499 | 3505 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
3500 | | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", |
3501 | | "dev": true |
| 3506 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" |
3502 | 3507 | }, |
3503 | 3508 | "fsevents": { |
3504 | 3509 | "version": "1.1.3", |
… |
… |
|
4505 | 4510 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", |
4506 | 4511 | "dev": true |
4507 | 4512 | }, |
| 4513 | "get-symlinks": { |
| 4514 | "version": "1.0.2", |
| 4515 | "resolved": "https://registry.npmjs.org/get-symlinks/-/get-symlinks-1.0.2.tgz", |
| 4516 | "integrity": "sha1-sOYpxRHeGYGd08dskruNLi9CPGM=", |
| 4517 | "requires": { |
| 4518 | "globby": "^6.0.0", |
| 4519 | "is-symbolic-link": "^1.0.3", |
| 4520 | "object-assign": "^4.1.0", |
| 4521 | "pinkie-promise": "^2.0.1" |
| 4522 | } |
| 4523 | }, |
4508 | 4524 | "get-value": { |
4509 | 4525 | "version": "2.0.6", |
4510 | 4526 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", |
… |
… |
|
4642 | 4658 | "version": "6.1.0", |
4643 | 4659 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", |
4644 | 4660 | "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", |
4645 | | "dev": true, |
4646 | 4661 | "requires": { |
4647 | 4662 | "array-union": "^1.0.1", |
4648 | 4663 | "glob": "^7.0.3", |
… |
… |
|
4655 | 4670 | "version": "7.1.2", |
4656 | 4671 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", |
4657 | 4672 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", |
4658 | | "dev": true, |
4659 | 4673 | "requires": { |
4660 | 4674 | "fs.realpath": "^1.0.0", |
4661 | 4675 | "inflight": "^1.0.4", |
… |
… |
|
4669 | 4683 | "version": "3.0.4", |
4670 | 4684 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", |
4671 | 4685 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", |
4672 | | "dev": true, |
4673 | 4686 | "requires": { |
4674 | 4687 | "brace-expansion": "^1.1.7" |
4675 | 4688 | } |
… |
… |
|
4976 | 4989 | "grunt-lib-phantomjs": "^1.0.0" |
4977 | 4990 | } |
4978 | 4991 | }, |
| 4992 | "grunt-contrib-symlink": { |
| 4993 | "version": "1.0.0", |
| 4994 | "resolved": "https://registry.npmjs.org/grunt-contrib-symlink/-/grunt-contrib-symlink-1.0.0.tgz", |
| 4995 | "integrity": "sha1-yDYWwDVxGmwAYqKBDPHHf/xr7Ss=", |
| 4996 | "dev": true |
| 4997 | }, |
4979 | 4998 | "grunt-contrib-uglify": { |
4980 | 4999 | "version": "2.0.0", |
4981 | 5000 | "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", |
… |
… |
|
5883 | 5902 | "version": "1.0.6", |
5884 | 5903 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", |
5885 | 5904 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", |
5886 | | "dev": true, |
5887 | 5905 | "requires": { |
5888 | 5906 | "once": "^1.3.0", |
5889 | 5907 | "wrappy": "1" |
… |
… |
|
5892 | 5910 | "inherits": { |
5893 | 5911 | "version": "2.0.3", |
5894 | 5912 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", |
5895 | | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", |
5896 | | "dev": true |
| 5913 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" |
5897 | 5914 | }, |
5898 | 5915 | "ini": { |
5899 | 5916 | "version": "1.3.5", |
… |
… |
|
6414 | 6431 | "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", |
6415 | 6432 | "dev": true |
6416 | 6433 | }, |
| 6434 | "is-symbolic-link": { |
| 6435 | "version": "1.0.3", |
| 6436 | "resolved": "https://registry.npmjs.org/is-symbolic-link/-/is-symbolic-link-1.0.3.tgz", |
| 6437 | "integrity": "sha1-e9PWyeX+lONCpHRQRIcW8MJUOIM=", |
| 6438 | "requires": { |
| 6439 | "pinkie-promise": "^2.0.1" |
| 6440 | } |
| 6441 | }, |
6417 | 6442 | "is-tar": { |
6418 | 6443 | "version": "1.0.0", |
6419 | 6444 | "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", |
… |
… |
|
7989 | 8014 | "object-assign": { |
7990 | 8015 | "version": "4.1.1", |
7991 | 8016 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", |
7992 | | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", |
7993 | | "dev": true |
| 8017 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" |
7994 | 8018 | }, |
7995 | 8019 | "object-copy": { |
7996 | 8020 | "version": "0.1.0", |
… |
… |
|
8144 | 8168 | "version": "1.4.0", |
8145 | 8169 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", |
8146 | 8170 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", |
8147 | | "dev": true, |
8148 | 8171 | "requires": { |
8149 | 8172 | "wrappy": "1" |
8150 | 8173 | } |
… |
… |
|
8406 | 8429 | "path-is-absolute": { |
8407 | 8430 | "version": "1.0.1", |
8408 | 8431 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
8409 | | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", |
8410 | | "dev": true |
| 8432 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" |
8411 | 8433 | }, |
8412 | 8434 | "path-is-inside": { |
8413 | 8435 | "version": "1.0.2", |
… |
… |
|
8502 | 8524 | "pify": { |
8503 | 8525 | "version": "2.3.0", |
8504 | 8526 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", |
8505 | | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", |
8506 | | "dev": true |
| 8527 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" |
8507 | 8528 | }, |
8508 | 8529 | "pinkie": { |
8509 | 8530 | "version": "2.0.4", |
8510 | 8531 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", |
8511 | | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", |
8512 | | "dev": true |
| 8532 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" |
8513 | 8533 | }, |
8514 | 8534 | "pinkie-promise": { |
8515 | 8535 | "version": "2.0.1", |
8516 | 8536 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", |
8517 | 8537 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", |
8518 | | "dev": true, |
8519 | 8538 | "requires": { |
8520 | 8539 | "pinkie": "^2.0.0" |
8521 | 8540 | } |
… |
… |
|
11721 | 11740 | "wrappy": { |
11722 | 11741 | "version": "1.0.2", |
11723 | 11742 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
11724 | | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", |
11725 | | "dev": true |
| 11743 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" |
11726 | 11744 | }, |
11727 | 11745 | "xmlbuilder": { |
11728 | 11746 | "version": "8.2.2", |
diff --git package.json package.json
index 06a5a5e..c91331c 100644
|
|
|
15 | 15 | "devDependencies": { |
16 | 16 | "autoprefixer": "^6.5.1", |
17 | 17 | "check-node-version": "3.2.0", |
| 18 | "del-symlinks": "0.1.2", |
18 | 19 | "grunt": "1.0.2", |
19 | 20 | "grunt-banner": "^0.6.0", |
20 | 21 | "grunt-contrib-clean": "~1.0.0", |
… |
… |
|
25 | 26 | "grunt-contrib-imagemin": "~1.0.0", |
26 | 27 | "grunt-contrib-jshint": "~1.0.0", |
27 | 28 | "grunt-contrib-qunit": "^1.2.0", |
| 29 | "grunt-contrib-symlink": "1.0.0", |
28 | 30 | "grunt-contrib-uglify": "~2.0.0", |
29 | 31 | "grunt-contrib-watch": "~1.0.0", |
30 | 32 | "grunt-file-append": "0.0.7", |