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 коммит произвёл GitHub
Родитель e18f508e66
Коммит cbb47570bd
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
9 изменённых файлов: 60 добавлений и 60 удалений

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

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

Просмотреть файл

@ -90,7 +90,7 @@ const LINTERS = [{
}
}, {
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'],
test: filename => filename.endsWith('.js') || filename.endsWith('.ts'),
run: (opts, filenames) => {