build: run the JS linter on the build folder (#24513)
This commit is contained in:
parent
e18f508e66
commit
cbb47570bd
9 changed files with 60 additions and 60 deletions
|
@ -1,2 +1,2 @@
|
||||||
process.env.PRINT_WEBPACK_GRAPH = true
|
process.env.PRINT_WEBPACK_GRAPH = true;
|
||||||
require('./run-compiler')
|
require('./run-compiler');
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
|
@ -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)
|
||||||
]
|
]
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module.exports = require('./webpack.config.base')({
|
module.exports = require('./webpack.config.base')({
|
||||||
target: 'browser',
|
target: 'browser',
|
||||||
alwaysHasNode: true
|
alwaysHasNode: true
|
||||||
})
|
});
|
||||||
|
|
|
@ -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
|
||||||
})
|
});
|
||||||
|
|
|
@ -3,4 +3,4 @@ module.exports = require('./webpack.config.base')({
|
||||||
alwaysHasNode: true,
|
alwaysHasNode: true,
|
||||||
targetDeletesNodeGlobals: true,
|
targetDeletesNodeGlobals: true,
|
||||||
wrapInitWithProfilingTimeout: true
|
wrapInitWithProfilingTimeout: true
|
||||||
})
|
});
|
||||||
|
|
|
@ -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
|
||||||
})
|
});
|
||||||
|
|
|
@ -3,4 +3,4 @@ module.exports = require('./webpack.config.base')({
|
||||||
loadElectronFromAlternateTarget: 'renderer',
|
loadElectronFromAlternateTarget: 'renderer',
|
||||||
alwaysHasNode: true,
|
alwaysHasNode: true,
|
||||||
targetDeletesNodeGlobals: true
|
targetDeletesNodeGlobals: true
|
||||||
})
|
});
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue