Skip to content

Commit 24f7393

Browse files
committed
add yarn watch-web
1 parent 04ed915 commit 24f7393

2 files changed

Lines changed: 93 additions & 44 deletions

File tree

build/gulpfile.extensions.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ require('events').EventEmitter.defaultMaxListeners = 100;
88

99
const gulp = require('gulp');
1010
const path = require('path');
11+
const nodeUtil = require('util');
1112
const tsb = require('gulp-tsb');
1213
const es = require('event-stream');
1314
const filter = require('gulp-filter');
15+
const webpack = require('webpack');
1416
const util = require('./lib/util');
1517
const task = require('./lib/task');
1618
const watcher = require('./lib/watch');
@@ -21,6 +23,8 @@ const nlsDev = require('vscode-nls-dev');
2123
const root = path.dirname(__dirname);
2224
const commit = util.getVersion(root);
2325
const plumber = require('gulp-plumber');
26+
const fancyLog = require('fancy-log');
27+
const ansiColors = require('ansi-colors');
2428
const ext = require('./lib/extensions');
2529

2630
const extensionsPath = path.join(path.dirname(__dirname), 'extensions');
@@ -167,3 +171,78 @@ const compileExtensionsBuildTask = task.define('compile-extensions-build', task.
167171

168172
gulp.task(compileExtensionsBuildTask);
169173
exports.compileExtensionsBuildTask = compileExtensionsBuildTask;
174+
175+
const compileWebExtensionsTask = task.define('compile-web', () => buildWebExtensions(false));
176+
gulp.task(compileWebExtensionsTask);
177+
exports.compileWebExtensionsTask = compileWebExtensionsTask;
178+
179+
const watchWebExtensionsTask = task.define('watch-web', () => buildWebExtensions(true));
180+
gulp.task(watchWebExtensionsTask);
181+
exports.watchWebExtensionsTask = watchWebExtensionsTask;
182+
183+
async function buildWebExtensions(isWatch) {
184+
185+
const webpackConfigLocations = await nodeUtil.promisify(glob)(
186+
path.join(extensionsPath, '**', 'extension-browser.webpack.config.js'),
187+
{ ignore: ['**/node_modules'] }
188+
);
189+
190+
const webpackConfigs = [];
191+
192+
for (const webpackConfigPath of webpackConfigLocations) {
193+
const configOrFnOrArray = require(webpackConfigPath);
194+
function addConfig(configOrFn) {
195+
if (typeof configOrFn === 'function') {
196+
webpackConfigs.push(configOrFn({}, {}));
197+
} else {
198+
webpackConfigs.push(configOrFn);
199+
}
200+
}
201+
addConfig(configOrFnOrArray);
202+
}
203+
function reporter(fullStats) {
204+
if (Array.isArray(fullStats.children)) {
205+
for (const stats of fullStats.children) {
206+
const outputPath = stats.outputPath;
207+
if (outputPath) {
208+
const relativePath = path.relative(extensionsPath, outputPath);
209+
const match = relativePath.match(/[^\/]+(\/server|\/client)?/);
210+
fancyLog(`Finished ${ansiColors.green('packaging web extension')} ${ansiColors.cyan(match[0])} with ${stats.errors.length} errors.`);
211+
}
212+
if (Array.isArray(stats.errors)) {
213+
stats.errors.forEach(error => {
214+
fancyLog.error(error);
215+
});
216+
}
217+
if (Array.isArray(stats.warnings)) {
218+
stats.warnings.forEach(warning => {
219+
fancyLog.warn(warning);
220+
});
221+
}
222+
}
223+
}
224+
}
225+
return new Promise((resolve, reject) => {
226+
if (isWatch) {
227+
webpack(webpackConfigs).watch({}, (err, stats) => {
228+
if (err) {
229+
reject();
230+
} else {
231+
reporter(stats.toJson());
232+
}
233+
});
234+
} else {
235+
webpack(webpackConfigs).run((err, stats) => {
236+
if (err) {
237+
fancyLog.error(err);
238+
reject();
239+
} else {
240+
reporter(stats.toJson());
241+
resolve();
242+
}
243+
});
244+
}
245+
});
246+
}
247+
248+

resources/serverless/code-web.js

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ const url = require('url');
1212
const fs = require('fs');
1313
const path = require('path');
1414
const util = require('util');
15-
const glob = require('glob');
1615
const opn = require('opn');
1716
const minimist = require('minimist');
18-
const webpack = require('webpack');
17+
const fancyLog = require('fancy-log');
18+
const ansiColors = require('ansi-colors');
1919

2020
const APP_ROOT = path.join(__dirname, '..', '..');
2121
const EXTENSIONS_ROOT = path.join(APP_ROOT, 'extensions');
@@ -59,11 +59,11 @@ const AUTHORITY = process.env.VSCODE_AUTHORITY || `${HOST}:${PORT}`;
5959

6060
const exists = (path) => util.promisify(fs.exists)(path);
6161
const readFile = (path) => util.promisify(fs.readFile)(path);
62-
const CharCode_PC = '%'.charCodeAt(0);
62+
63+
let unbuiltExensions = [];
6364

6465
async function initialize() {
6566
const builtinExtensions = [];
66-
const webpackConfigs = [];
6767

6868
const children = await util.promisify(fs.readdir)(EXTENSIONS_ROOT, { withFileTypes: true });
6969
const folders = children.filter(c => !c.isFile());
@@ -95,24 +95,14 @@ async function initialize() {
9595
if (packageJSON.browser) {
9696
packageJSON.main = packageJSON.browser;
9797

98-
const webpackConfigLocations = await util.promisify(glob)(
99-
path.join(EXTENSIONS_ROOT, folderName, '**', 'extension-browser.webpack.config.js'),
100-
{ ignore: ['**/node_modules'] }
101-
);
102-
103-
for (const webpackConfigPath of webpackConfigLocations) {
104-
const configOrFnOrArray = require(webpackConfigPath);
105-
function addConfig(configOrFn) {
106-
if (typeof configOrFn === 'function') {
107-
webpackConfigs.push(configOrFn({}, {}));
108-
} else {
109-
webpackConfigs.push(configOrFn);
110-
}
111-
}
112-
addConfig(configOrFnOrArray);
98+
let mainFilePath = path.join(EXTENSIONS_ROOT, folderName, packageJSON.browser);
99+
if (path.extname(mainFilePath) !== '.js') {
100+
mainFilePath += '.js';
101+
}
102+
if (!await exists(mainFilePath)) {
103+
unbuiltExensions.push(path.relative(EXTENSIONS_ROOT, mainFilePath))
113104
}
114105
}
115-
116106
packageJSON.extensionKind = ['web']; // enable for Web
117107

118108
const packageNLSPath = path.join(folderName, 'package.nls.json');
@@ -129,30 +119,10 @@ async function initialize() {
129119
}
130120
}
131121
}));
132-
133-
return new Promise((resolve, reject) => {
134-
if (args.watch) {
135-
webpack(webpackConfigs).watch({}, (err, stats) => {
136-
if (err) {
137-
console.log(err);
138-
reject();
139-
} else {
140-
console.log(stats.toString());
141-
resolve(builtinExtensions);
142-
}
143-
});
144-
} else {
145-
webpack(webpackConfigs).run((err, stats) => {
146-
if (err) {
147-
console.log(err);
148-
reject();
149-
} else {
150-
console.log(stats.toString());
151-
resolve(builtinExtensions);
152-
}
153-
});
154-
}
155-
});
122+
if (unbuiltExensions.length) {
123+
fancyLog(`${ansiColors.yellow('Warning')}: Make sure to run ${ansiColors.cyan('yarn gulp watch-web')}\nCould not find the following browser main files: \n${unbuiltExensions.join('\n')}`);
124+
}
125+
return builtinExtensions;
156126
}
157127

158128
const builtinExtensionsPromise = initialize();

0 commit comments

Comments
 (0)