invoke webpack when bundling extensions

This commit is contained in:
Johannes Rieken
2018-08-08 16:53:55 +02:00
parent 34159e797b
commit fdb7b4bcf4
8 changed files with 1993 additions and 79 deletions

View File

@@ -14,14 +14,15 @@ var rename = require('gulp-rename');
var util = require('gulp-util');
var buffer = require('gulp-buffer');
var json = require('gulp-json-editor');
var webpack = require('webpack');
var webpackGulp = require('webpack-stream');
var fs = require("fs");
var path = require("path");
var vsce = require("vsce");
var File = require("vinyl");
function fromLocal(extensionPath) {
var result = es.through();
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
.then(function (fileNames) {
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn }).then(function (fileNames) {
var files = fileNames
.map(function (fileName) { return path.join(extensionPath, fileName); })
.map(function (filePath) { return new File({
@@ -30,9 +31,35 @@ function fromLocal(extensionPath) {
base: extensionPath,
contents: fs.createReadStream(filePath)
}); });
es.readArray(files).pipe(result);
})
.catch(function (err) { return result.emit('error', err); });
var filesStream = es.readArray(files);
// check for a webpack configuration file, then invoke webpack
// and merge its output with the files stream. also rewrite the package.json
// file to a new entry point
if (fs.existsSync(path.join(extensionPath, 'extension.webpack.config.js'))) {
var packageJsonFilter = filter('package.json', { restore: true });
var patchFilesStream = filesStream
.pipe(packageJsonFilter)
.pipe(buffer())
.pipe(json({ main: './dist/main.bundle' })) // hardcoded entry point!
.pipe(packageJsonFilter.restore);
var webpackConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
var webpackStream = webpackGulp(webpackConfig, webpack)
.pipe(es.through(function (data) {
data.base = extensionPath;
this.emit('data', data);
}));
es.merge(webpackStream, patchFilesStream)
// .pipe(es.through(function (data) {
// // debug
// console.log('out', data.path, data.base, data.contents.length);
// this.emit('data', data);
// }))
.pipe(result);
}
else {
filesStream.pipe(result);
}
}).catch(function (err) { return result.emit('error', err); });
return result;
}
exports.fromLocal = fromLocal;