build: run the JS linter on the build folder (#24513)

This commit is contained in:
Samuel Attard 2020-07-10 14:48:50 -07:00 committed by GitHub
parent e18f508e66
commit cbb47570bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 60 additions and 60 deletions

View file

@ -1,2 +1,2 @@
process.env.PRINT_WEBPACK_GRAPH = true process.env.PRINT_WEBPACK_GRAPH = true;
require('./run-compiler') require('./run-compiler');

View file

@ -1,25 +1,25 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path') const path = require('path');
const webpack = require('webpack') const webpack = require('webpack');
const configPath = process.argv[2] const configPath = process.argv[2];
const outPath = path.resolve(process.argv[3]) const outPath = path.resolve(process.argv[3]);
const config = require(configPath) const config = require(configPath);
config.output = { config.output = {
path: path.dirname(outPath), path: path.dirname(outPath),
filename: path.basename(outPath) filename: path.basename(outPath)
} };
const { wrapInitWithProfilingTimeout } = config; const { wrapInitWithProfilingTimeout } = config;
delete config.wrapInitWithProfilingTimeout; delete config.wrapInitWithProfilingTimeout;
webpack(config, (err, stats) => { webpack(config, (err, stats) => {
if (err) { if (err) {
console.error(err) console.error(err);
process.exit(1) process.exit(1);
} else if (stats.hasErrors()) { } else if (stats.hasErrors()) {
console.error(stats.toString('normal')) console.error(stats.toString('normal'));
process.exit(1) process.exit(1);
} else { } else {
if (wrapInitWithProfilingTimeout) { if (wrapInitWithProfilingTimeout) {
const contents = fs.readFileSync(outPath, 'utf8'); const contents = fs.readFileSync(outPath, 'utf8');
@ -33,6 +33,6 @@ if ((globalThis.process || binding.process).argv.includes("--profile-electron-in
}`; }`;
fs.writeFileSync(outPath, newContents); fs.writeFileSync(outPath, newContents);
} }
process.exit(0) process.exit(0);
} }
}) });

View file

@ -1,39 +1,39 @@
const fs = require('fs') const fs = require('fs');
const path = require('path') const path = require('path');
const webpack = require('webpack') const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin');
const electronRoot = path.resolve(__dirname, '../..') const electronRoot = path.resolve(__dirname, '../..');
const onlyPrintingGraph = !!process.env.PRINT_WEBPACK_GRAPH const onlyPrintingGraph = !!process.env.PRINT_WEBPACK_GRAPH;
class AccessDependenciesPlugin { class AccessDependenciesPlugin {
apply(compiler) { apply (compiler) {
// Only hook into webpack when we are printing the dependency graph // Only hook into webpack when we are printing the dependency graph
if (!onlyPrintingGraph) return if (!onlyPrintingGraph) return;
compiler.hooks.compilation.tap('AccessDependenciesPlugin', compilation => { compiler.hooks.compilation.tap('AccessDependenciesPlugin', compilation => {
compilation.hooks.finishModules.tap('AccessDependenciesPlugin', modules => { compilation.hooks.finishModules.tap('AccessDependenciesPlugin', modules => {
const filePaths = modules.map(m => m.resource).filter(p => p).map(p => path.relative(electronRoot, p)) const filePaths = modules.map(m => m.resource).filter(p => p).map(p => path.relative(electronRoot, p));
console.info(JSON.stringify(filePaths)) console.info(JSON.stringify(filePaths));
}) });
}) });
} }
} }
const defines = { const defines = {
BUILDFLAG: onlyPrintingGraph ? '(a => a)' : '' BUILDFLAG: onlyPrintingGraph ? '(a => a)' : ''
} };
const buildFlagsPrefix = '--buildflags=' const buildFlagsPrefix = '--buildflags=';
const buildFlagArg = process.argv.find(arg => arg.startsWith(buildFlagsPrefix)); const buildFlagArg = process.argv.find(arg => arg.startsWith(buildFlagsPrefix));
if (buildFlagArg) { if (buildFlagArg) {
const buildFlagPath = buildFlagArg.substr(buildFlagsPrefix.length) const buildFlagPath = buildFlagArg.substr(buildFlagsPrefix.length);
const flagFile = fs.readFileSync(buildFlagPath, 'utf8') const flagFile = fs.readFileSync(buildFlagPath, 'utf8');
for (const line of flagFile.split(/(\r\n|\r|\n)/g)) { for (const line of flagFile.split(/(\r\n|\r|\n)/g)) {
const flagMatch = line.match(/#define BUILDFLAG_INTERNAL_(.+?)\(\) \(([01])\)/) const flagMatch = line.match(/#define BUILDFLAG_INTERNAL_(.+?)\(\) \(([01])\)/);
if (flagMatch) { if (flagMatch) {
const [, flagName, flagValue] = flagMatch; const [, flagName, flagValue] = flagMatch;
defines[flagName] = JSON.stringify(Boolean(parseInt(flagValue, 10))); defines[flagName] = JSON.stringify(Boolean(parseInt(flagValue, 10)));
@ -41,27 +41,27 @@ if (buildFlagArg) {
} }
} }
const ignoredModules = [] const ignoredModules = [];
if (defines['ENABLE_DESKTOP_CAPTURER'] === 'false') { if (defines.ENABLE_DESKTOP_CAPTURER === 'false') {
ignoredModules.push( ignoredModules.push(
'@electron/internal/browser/desktop-capturer', '@electron/internal/browser/desktop-capturer',
'@electron/internal/browser/api/desktop-capturer', '@electron/internal/browser/api/desktop-capturer',
'@electron/internal/renderer/api/desktop-capturer' '@electron/internal/renderer/api/desktop-capturer'
) );
} }
if (defines['ENABLE_REMOTE_MODULE'] === 'false') { if (defines.ENABLE_REMOTE_MODULE === 'false') {
ignoredModules.push( ignoredModules.push(
'@electron/internal/browser/remote/server', '@electron/internal/browser/remote/server',
'@electron/internal/renderer/api/remote' '@electron/internal/renderer/api/remote'
) );
} }
if (defines['ENABLE_VIEWS_API'] === 'false') { if (defines.ENABLE_VIEWS_API === 'false') {
ignoredModules.push( ignoredModules.push(
'@electron/internal/browser/api/views/image-view.js' '@electron/internal/browser/api/views/image-view.js'
) );
} }
module.exports = ({ module.exports = ({
@ -71,9 +71,9 @@ module.exports = ({
target, target,
wrapInitWithProfilingTimeout wrapInitWithProfilingTimeout
}) => { }) => {
let entry = path.resolve(electronRoot, 'lib', target, 'init.ts') let entry = path.resolve(electronRoot, 'lib', target, 'init.ts');
if (!fs.existsSync(entry)) { if (!fs.existsSync(entry)) {
entry = path.resolve(electronRoot, 'lib', target, 'init.js') entry = path.resolve(electronRoot, 'lib', target, 'init.js');
} }
return ({ return ({
@ -88,16 +88,16 @@ module.exports = ({
resolve: { resolve: {
alias: { alias: {
'@electron/internal': path.resolve(electronRoot, 'lib'), '@electron/internal': path.resolve(electronRoot, 'lib'),
'electron': path.resolve(electronRoot, 'lib', loadElectronFromAlternateTarget || target, 'api', 'exports', 'electron.ts'), electron: path.resolve(electronRoot, 'lib', loadElectronFromAlternateTarget || target, 'api', 'exports', 'electron.ts'),
// Force timers to resolve to our dependency that doesn't use window.postMessage // Force timers to resolve to our dependency that doesn't use window.postMessage
'timers': path.resolve(electronRoot, 'node_modules', 'timers-browserify', 'main.js') timers: path.resolve(electronRoot, 'node_modules', 'timers-browserify', 'main.js')
}, },
extensions: ['.ts', '.js'] extensions: ['.ts', '.js']
}, },
module: { module: {
rules: [{ rules: [{
test: (moduleName) => !onlyPrintingGraph && ignoredModules.includes(moduleName), test: (moduleName) => !onlyPrintingGraph && ignoredModules.includes(moduleName),
loader: 'null-loader', loader: 'null-loader'
}, { }, {
test: /\.ts$/, test: /\.ts$/,
loader: 'ts-loader', loader: 'ts-loader',
@ -106,7 +106,7 @@ module.exports = ({
transpileOnly: onlyPrintingGraph, transpileOnly: onlyPrintingGraph,
ignoreDiagnostics: [ ignoreDiagnostics: [
// File '{0}' is not under 'rootDir' '{1}'. // File '{0}' is not under 'rootDir' '{1}'.
6059, 6059
] ]
} }
}] }]
@ -116,7 +116,7 @@ module.exports = ({
__filename: false, __filename: false,
// We provide our own "timers" import above, any usage of setImmediate inside // We provide our own "timers" import above, any usage of setImmediate inside
// one of our renderer bundles should import it from the 'timers' package // one of our renderer bundles should import it from the 'timers' package
setImmediate: false, setImmediate: false
}, },
optimization: { optimization: {
minimize: true, minimize: true,
@ -124,10 +124,10 @@ module.exports = ({
new TerserPlugin({ new TerserPlugin({
terserOptions: { terserOptions: {
keep_classnames: true, keep_classnames: true,
keep_fnames: true, keep_fnames: true
}, }
}), })
], ]
}, },
plugins: [ plugins: [
new AccessDependenciesPlugin(), new AccessDependenciesPlugin(),
@ -135,13 +135,13 @@ module.exports = ({
new webpack.ProvidePlugin({ new webpack.ProvidePlugin({
process: ['@electron/internal/renderer/webpack-provider', 'process'], process: ['@electron/internal/renderer/webpack-provider', 'process'],
global: ['@electron/internal/renderer/webpack-provider', '_global'], global: ['@electron/internal/renderer/webpack-provider', '_global'],
Buffer: ['@electron/internal/renderer/webpack-provider', 'Buffer'], Buffer: ['@electron/internal/renderer/webpack-provider', 'Buffer']
}) })
] : []), ] : []),
new webpack.ProvidePlugin({ new webpack.ProvidePlugin({
Promise: ['@electron/internal/common/webpack-globals-provider', 'Promise'], Promise: ['@electron/internal/common/webpack-globals-provider', 'Promise']
}), }),
new webpack.DefinePlugin(defines), new webpack.DefinePlugin(defines)
] ]
}) });
} };

View file

@ -1,4 +1,4 @@
module.exports = require('./webpack.config.base')({ module.exports = require('./webpack.config.base')({
target: 'browser', target: 'browser',
alwaysHasNode: true alwaysHasNode: true
}) });

View file

@ -1,4 +1,4 @@
module.exports = require('./webpack.config.base')({ module.exports = require('./webpack.config.base')({
target: 'isolated_renderer', target: 'isolated_renderer',
alwaysHasNode: false alwaysHasNode: false
}) });

View file

@ -3,4 +3,4 @@ module.exports = require('./webpack.config.base')({
alwaysHasNode: true, alwaysHasNode: true,
targetDeletesNodeGlobals: true, targetDeletesNodeGlobals: true,
wrapInitWithProfilingTimeout: true wrapInitWithProfilingTimeout: true
}) });

View file

@ -1,5 +1,5 @@
module.exports = require('./webpack.config.base')({ module.exports = require('./webpack.config.base')({
target: 'sandboxed_renderer', target: 'sandboxed_renderer',
alwaysHasNode: false, alwaysHasNode: false,
wrapInitWithProfilingTimeout: true, wrapInitWithProfilingTimeout: true
}) });

View file

@ -3,4 +3,4 @@ module.exports = require('./webpack.config.base')({
loadElectronFromAlternateTarget: 'renderer', loadElectronFromAlternateTarget: 'renderer',
alwaysHasNode: true, alwaysHasNode: true,
targetDeletesNodeGlobals: true targetDeletesNodeGlobals: true
}) });

View file

@ -90,7 +90,7 @@ const LINTERS = [{
} }
}, { }, {
key: 'javascript', key: 'javascript',
roots: ['lib', 'spec', 'spec-main', 'script', 'default_app'], roots: ['lib', 'spec', 'spec-main', 'script', 'default_app', 'build'],
ignoreRoots: ['spec/node_modules', 'spec-main/node_modules'], ignoreRoots: ['spec/node_modules', 'spec-main/node_modules'],
test: filename => filename.endsWith('.js') || filename.endsWith('.ts'), test: filename => filename.endsWith('.js') || filename.endsWith('.ts'),
run: (opts, filenames) => { run: (opts, filenames) => {