Skip to content

Commit fdb7b4b

Browse files
committed
invoke webpack when bundling extensions
1 parent 34159e7 commit fdb7b4b

8 files changed

Lines changed: 1994 additions & 80 deletions

File tree

build/lib/extensions.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ var rename = require('gulp-rename');
1414
var util = require('gulp-util');
1515
var buffer = require('gulp-buffer');
1616
var json = require('gulp-json-editor');
17+
var webpack = require('webpack');
18+
var webpackGulp = require('webpack-stream');
1719
var fs = require("fs");
1820
var path = require("path");
1921
var vsce = require("vsce");
2022
var File = require("vinyl");
2123
function fromLocal(extensionPath) {
2224
var result = es.through();
23-
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
24-
.then(function (fileNames) {
25+
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn }).then(function (fileNames) {
2526
var files = fileNames
2627
.map(function (fileName) { return path.join(extensionPath, fileName); })
2728
.map(function (filePath) { return new File({
@@ -30,9 +31,35 @@ function fromLocal(extensionPath) {
3031
base: extensionPath,
3132
contents: fs.createReadStream(filePath)
3233
}); });
33-
es.readArray(files).pipe(result);
34-
})
35-
.catch(function (err) { return result.emit('error', err); });
34+
var filesStream = es.readArray(files);
35+
// check for a webpack configuration file, then invoke webpack
36+
// and merge its output with the files stream. also rewrite the package.json
37+
// file to a new entry point
38+
if (fs.existsSync(path.join(extensionPath, 'extension.webpack.config.js'))) {
39+
var packageJsonFilter = filter('package.json', { restore: true });
40+
var patchFilesStream = filesStream
41+
.pipe(packageJsonFilter)
42+
.pipe(buffer())
43+
.pipe(json({ main: './dist/main.bundle' })) // hardcoded entry point!
44+
.pipe(packageJsonFilter.restore);
45+
var webpackConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
46+
var webpackStream = webpackGulp(webpackConfig, webpack)
47+
.pipe(es.through(function (data) {
48+
data.base = extensionPath;
49+
this.emit('data', data);
50+
}));
51+
es.merge(webpackStream, patchFilesStream)
52+
// .pipe(es.through(function (data) {
53+
// // debug
54+
// console.log('out', data.path, data.base, data.contents.length);
55+
// this.emit('data', data);
56+
// }))
57+
.pipe(result);
58+
}
59+
else {
60+
filesStream.pipe(result);
61+
}
62+
}).catch(function (err) { return result.emit('error', err); });
3663
return result;
3764
}
3865
exports.fromLocal = fromLocal;

build/lib/extensions.ts

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,61 @@ const rename = require('gulp-rename');
1414
const util = require('gulp-util');
1515
const buffer = require('gulp-buffer');
1616
const json = require('gulp-json-editor');
17+
const webpack = require('webpack');
18+
const webpackGulp = require('webpack-stream');
1719
import * as fs from 'fs';
1820
import * as path from 'path';
1921
import * as vsce from 'vsce';
2022
import * as File from 'vinyl';
23+
import { rebase } from './util';
2124

2225
export function fromLocal(extensionPath: string): Stream {
23-
const result = es.through();
24-
25-
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
26-
.then(fileNames => {
27-
const files = fileNames
28-
.map(fileName => path.join(extensionPath, fileName))
29-
.map(filePath => new File({
30-
path: filePath,
31-
stat: fs.statSync(filePath),
32-
base: extensionPath,
33-
contents: fs.createReadStream(filePath) as any
26+
let result = es.through();
27+
28+
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn }).then(fileNames => {
29+
const files = fileNames
30+
.map(fileName => path.join(extensionPath, fileName))
31+
.map(filePath => new File({
32+
path: filePath,
33+
stat: fs.statSync(filePath),
34+
base: extensionPath,
35+
contents: fs.createReadStream(filePath) as any
36+
}));
37+
38+
const filesStream = es.readArray(files);
39+
40+
// check for a webpack configuration file, then invoke webpack
41+
// and merge its output with the files stream. also rewrite the package.json
42+
// file to a new entry point
43+
if (fs.existsSync(path.join(extensionPath, 'extension.webpack.config.js'))) {
44+
const packageJsonFilter = filter('package.json', { restore: true });
45+
46+
const patchFilesStream = filesStream
47+
.pipe(packageJsonFilter)
48+
.pipe(buffer())
49+
.pipe(json({ main: './dist/main.bundle' })) // hardcoded entry point!
50+
.pipe(packageJsonFilter.restore);
51+
52+
const webpackConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
53+
const webpackStream = webpackGulp(webpackConfig, webpack)
54+
.pipe(es.through(function (data) {
55+
data.base = extensionPath;
56+
this.emit('data', data);
3457
}));
3558

36-
es.readArray(files).pipe(result);
37-
})
38-
.catch(err => result.emit('error', err));
59+
es.merge(webpackStream, patchFilesStream)
60+
// .pipe(es.through(function (data) {
61+
// // debug
62+
// console.log('out', data.path, data.base, data.contents.length);
63+
// this.emit('data', data);
64+
// }))
65+
.pipe(result);
66+
67+
} else {
68+
filesStream.pipe(result);
69+
}
70+
71+
}).catch(err => result.emit('error', err));
3972

4073
return result;
4174
}

extensions/git/.vscodeignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
src/**
22
test/**
3-
out/test/**
3+
out/**
44
tsconfig.json
5-
build/**
5+
build/**
6+
node_modules/**

extensions/git/webpack.config.js renamed to extensions/git/extension.webpack.config.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
const path = require('path');
99

1010
module.exports = {
11-
mode: 'production',
11+
mode: 'none',
1212
target: 'node',
13-
entry: './out/main.js',
13+
context: __dirname,
14+
entry: {
15+
main: './out/main.js',
16+
askpass: './out/askpass-main.js'
17+
},
1418
output: {
15-
filename: 'main.js',
16-
path: path.resolve(__dirname, 'dist'),
19+
filename: '[name].bundle.js',
20+
path: path.join(__dirname, 'dist'),
1721
libraryTarget: "commonjs"
1822
},
1923
externals: {
2024
'vscode': 'commonjs vscode',
2125
},
22-
devtool: 'source-map'
26+
stats: 'errors-only'
2327
};

extensions/git/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"activationEvents": [
1616
"*"
1717
],
18-
"main": "./dist/main",
18+
"main": "./out/main",
1919
"icon": "resources/icons/git.png",
2020
"scripts": {
2121
"compile": "gulp compile-extension:git",

extensions/git/yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,8 +1210,8 @@ ini@~1.3.0:
12101210
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
12111211

12121212
inquirer@^6.0.0:
1213-
version "6.0.0"
1214-
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.0.0.tgz#e8c20303ddc15bbfc2c12a6213710ccd9e1413d8"
1213+
version "6.1.0"
1214+
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.1.0.tgz#8f65c7b31c498285f4ddf3b742ad8c487892040b"
12151215
dependencies:
12161216
ansi-escapes "^3.0.0"
12171217
chalk "^2.0.0"
@@ -2174,8 +2174,8 @@ sax@^1.2.4:
21742174
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
21752175

21762176
schema-utils@^0.4.4, schema-utils@^0.4.5:
2177-
version "0.4.6"
2178-
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.6.tgz#dab4516a656310a964ca772bd3771819ba2b5cec"
2177+
version "0.4.7"
2178+
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
21792179
dependencies:
21802180
ajv "^6.1.0"
21812181
ajv-keywords "^3.1.0"

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,10 @@
123123
"vinyl": "^0.4.5",
124124
"vinyl-fs": "^2.4.3",
125125
"vsce": "1.33.2",
126-
"vscode-nls-dev": "3.0.7"
126+
"vscode-nls-dev": "3.0.7",
127+
"webpack": "^4.16.5",
128+
"webpack-cli": "^3.1.0",
129+
"webpack-stream": "^5.1.1"
127130
},
128131
"repository": {
129132
"type": "git",

0 commit comments

Comments
 (0)