mirror of
https://github.com/google/blockly.git
synced 2026-01-04 15:40:08 +01:00
Support for closure library option in uncompressed local build (#3633)
* Support for closure library option in uncompressed local build * Refactor into maybeAddClosureLibrary method
This commit is contained in:
66
gulpfile.js
66
gulpfile.js
@@ -161,16 +161,13 @@ function compile(compilerOptions, opt_verbose, opt_warnings_as_error) {
|
||||
}
|
||||
|
||||
/**
|
||||
* This task builds Blockly's core files.
|
||||
* blockly_compressed.js
|
||||
* Helper method for possibly adding the closure library into a sources array.
|
||||
* @param {Array.<string>} srcs
|
||||
*/
|
||||
gulp.task('build-compressed', function (cb) {
|
||||
const defines = 'Blockly.VERSION="' + packageJson.version + '"';
|
||||
const srcs = ['core/**/**/*.js'];
|
||||
function maybeAddClosureLibrary(srcs) {
|
||||
if (argv.closureLibrary) {
|
||||
// If you require the google closure library, you can include it in your
|
||||
// build by running:
|
||||
// gulp build-compressed --closure-library
|
||||
// build by adding the --closure-library flag.
|
||||
// You will also need to include the "google-closure-library" in your list
|
||||
// of devDependencies.
|
||||
console.log('Including the google-closure-library in your build.');
|
||||
@@ -178,9 +175,18 @@ gulp.task('build-compressed', function (cb) {
|
||||
throw Error('You must add the google-closure-library to your ' +
|
||||
'devDependencies in package.json, and run `npm install`.');
|
||||
}
|
||||
srcs.push('./node_modules/google-closure-library/closure/goog/**/*.js');
|
||||
srcs.push('./node_modules/google-closure-library/closure/goog/**/**/*.js');
|
||||
}
|
||||
return gulp.src(srcs, {base: './'})
|
||||
return srcs;
|
||||
}
|
||||
|
||||
/**
|
||||
* This task builds Blockly's core files.
|
||||
* blockly_compressed.js
|
||||
*/
|
||||
gulp.task('build-compressed', function (cb) {
|
||||
const defines = 'Blockly.VERSION="' + packageJson.version + '"';
|
||||
return gulp.src(maybeAddClosureLibrary(['core/**/**/*.js']), {base: './'})
|
||||
// Directories in Blockly are used to group similar files together
|
||||
// but are not used to limit access with @package, instead the
|
||||
// method means something is internal to Blockly and not a public
|
||||
@@ -229,7 +235,7 @@ goog.provide('Blockly.FieldTextInput');
|
||||
goog.provide('Blockly.FieldVariable');
|
||||
goog.provide('Blockly.Mutator');
|
||||
goog.provide('Blockly.Warning');`;
|
||||
return gulp.src('blocks/*.js', {base: './'})
|
||||
return gulp.src(maybeAddClosureLibrary(['blocks/*.js']), {base: './'})
|
||||
// Add Blockly.Blocks to be compatible with the compiler.
|
||||
.pipe(gulp.replace(`goog.provide('Blockly.Constants.Colour');`,
|
||||
`${provides}goog.provide('Blockly.Constants.Colour');`))
|
||||
@@ -338,6 +344,9 @@ gulp.task('build-generators', gulp.parallel(
|
||||
* blockly_uncompressed.js
|
||||
*/
|
||||
gulp.task('build-uncompressed', function() {
|
||||
const closurePath = argv.closureLibrary ?
|
||||
'node_modules/google-closure-library/closure/goog' :
|
||||
'closure/goog';
|
||||
const header = `// Do not edit this file; automatically generated by gulp.
|
||||
'use strict';
|
||||
|
||||
@@ -373,42 +382,37 @@ if (this.IS_NODE_JS) {
|
||||
module.exports = Blockly;
|
||||
} else {
|
||||
document.write('<script src="' + this.BLOCKLY_DIR +
|
||||
'/closure/goog/base.js"></script>');
|
||||
'/${closurePath}/base.js"></script>');
|
||||
document.write('<script>this.BLOCKLY_BOOT(this);</script>');
|
||||
}
|
||||
`;
|
||||
|
||||
let deps = [];
|
||||
return gulp.src('core/**/**/*.js')
|
||||
return gulp.src(maybeAddClosureLibrary(['core/**/**/*.js']))
|
||||
.pipe(through2.obj((file, _enc, cb) => {
|
||||
deps.push(closureDeps.parser.parseFile(file.path).dependencies[0]);
|
||||
const result = closureDeps.parser.parseFile(file.path);
|
||||
for (const dep of result.dependencies) {
|
||||
deps.push(dep);
|
||||
}
|
||||
cb(null);
|
||||
}))
|
||||
.on('end', () => {
|
||||
const graph = new closureDeps.depGraph.Graph(deps);
|
||||
let addDependency = [];
|
||||
graph.depsByPath.forEach(dep => {
|
||||
addDependency.push('goog.addDependency(' + [
|
||||
'"' + path.relative('./closure/goog', dep.path) + '"',
|
||||
'[' + dep.closureSymbols
|
||||
.map(s => `'${s}'`).join(', ') + ']',
|
||||
'[' + dep.imports
|
||||
.map(i => i.symOrPath)
|
||||
.filter(i => i !== 'goog')
|
||||
.sort()
|
||||
.map(i => `'${i}'`).join(', ') + ']',
|
||||
].join(', ') + ');');
|
||||
});
|
||||
const requires = `
|
||||
goog.addDependency("base.js", [], []);
|
||||
// Update the path to closure for any files that we don't know the full path
|
||||
// of (parsed from a goog.addDependency call).
|
||||
for (const dep of deps) {
|
||||
dep.setClosurePath(closurePath);
|
||||
}
|
||||
|
||||
const addDependency = closureDeps.depFile.getDepFileText(closurePath, deps);
|
||||
|
||||
const requires = `goog.addDependency("base.js", [], []);
|
||||
|
||||
// Load Blockly.
|
||||
goog.require('Blockly.requires')
|
||||
`;
|
||||
fs.writeFileSync('blockly_uncompressed.js',
|
||||
header +
|
||||
addDependency.sort((a, b) =>
|
||||
a.localeCompare(b, undefined, {sensitivity: 'base'})).join('\n') +
|
||||
addDependency +
|
||||
requires +
|
||||
footer);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user