Initialize remote IDE scaffold
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
/**
|
||||
* Don't touch this file. It will be regenerated by theia build.
|
||||
* To customize webpack configuration change /mnt/data/foss.global/git.zone/ide/applications/remote-theia/webpack.config.js
|
||||
*/
|
||||
// @ts-check
|
||||
const path = require('path');
|
||||
const yargs = require('yargs');
|
||||
const webpack = require('webpack');
|
||||
const TerserPlugin = require('terser-webpack-plugin');
|
||||
const NativeWebpackPlugin = require('@theia/native-webpack-plugin');
|
||||
const { MonacoWebpackPlugin } = require('@theia/native-webpack-plugin/lib/monaco-webpack-plugins.js');
|
||||
|
||||
const { mode } = yargs.option('mode', {
|
||||
description: "Mode to use",
|
||||
choices: ["development", "production"],
|
||||
default: "production"
|
||||
}).argv;
|
||||
|
||||
const production = mode === 'production';
|
||||
|
||||
/** @type {import('webpack').EntryObject} */
|
||||
const commonJsLibraries = {};
|
||||
for (const [entryPointName, entryPointPath] of Object.entries({
|
||||
'backend-init-theia': '@theia/plugin-ext/lib/hosted/node/scanners/backend-init-theia',
|
||||
'parcel-watcher': '@theia/filesystem/lib/node/parcel-watcher',
|
||||
'plugin-vscode-init': '@theia/plugin-ext-vscode/lib/node/plugin-vscode-init',
|
||||
|
||||
})) {
|
||||
commonJsLibraries[entryPointName] = {
|
||||
import: require.resolve(entryPointPath),
|
||||
library: {
|
||||
type: 'commonjs2',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const ignoredResources = new Set();
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
ignoredResources.add('@vscode/windows-ca-certs');
|
||||
ignoredResources.add('@vscode/windows-ca-certs/build/Release/crypt32.node');
|
||||
}
|
||||
|
||||
const nativePlugin = new NativeWebpackPlugin({
|
||||
out: 'native',
|
||||
trash: true,
|
||||
ripgrep: true,
|
||||
pty: true,
|
||||
nativeBindings: {
|
||||
drivelist: 'drivelist/build/Release/drivelist.node'
|
||||
}
|
||||
});
|
||||
|
||||
// Ensure that node-pty is correctly hoisted
|
||||
try {
|
||||
require.resolve('node-pty');
|
||||
} catch {
|
||||
console.error('"node-pty" dependency is not installed correctly. Ensure that it is available in the root node_modules directory.');
|
||||
console.error('Exiting webpack build process.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
/** @type {import('webpack').Configuration} */
|
||||
const config = {
|
||||
mode,
|
||||
devtool: mode === 'development' ? 'source-map' : false,
|
||||
target: 'node',
|
||||
node: {
|
||||
global: false,
|
||||
__filename: false,
|
||||
__dirname: false
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.json', '.wasm', '.node'],
|
||||
},
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: path.resolve(__dirname, 'lib', 'backend'),
|
||||
devtoolModuleFilenameTemplate: 'webpack:///[absolute-resource-path]?[loaders]',
|
||||
},
|
||||
entry: {
|
||||
// Main entry point of the Theia application backend:
|
||||
'main': require.resolve('./src-gen/backend/main'),
|
||||
// Theia's IPC mechanism:
|
||||
'ipc-bootstrap': require.resolve('@theia/core/lib/node/messaging/ipc-bootstrap'),
|
||||
// VS Code extension support:
|
||||
'plugin-host': require.resolve('@theia/plugin-ext/lib/hosted/node/plugin-host'),
|
||||
|
||||
// Make sure the node-pty thread workers can be executed:
|
||||
'worker/conoutSocketWorker': require.resolve('node-pty/lib/worker/conoutSocketWorker'),
|
||||
'conpty_console_list_agent': require.resolve('node-pty/lib/conpty_console_list_agent'),
|
||||
|
||||
|
||||
...commonJsLibraries
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
// Make sure we can still find and load our native addons.
|
||||
{
|
||||
test: /\.node$/,
|
||||
loader: 'node-loader',
|
||||
options: {
|
||||
name: 'native/[name].[ext]'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.d\.ts$/,
|
||||
loader: 'ignore-loader'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
enforce: 'pre',
|
||||
loader: 'source-map-loader'
|
||||
},
|
||||
// node-pty uses a dynamic require which needs to be rewritten to work with webpack.
|
||||
{
|
||||
test: /node_modules[/\\]node-pty[/\\]lib[/\\]utils.js$/,
|
||||
loader: 'string-replace-loader',
|
||||
options: {
|
||||
search: /require\(/,
|
||||
replace: '__non_webpack_require__(',
|
||||
flags: 'g'
|
||||
}
|
||||
},
|
||||
// jsonc-parser exposes its UMD implementation by default, which
|
||||
// confuses Webpack leading to missing js in the bundles.
|
||||
{
|
||||
test: /node_modules[\/](jsonc-parser)/,
|
||||
loader: 'umd-compat-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
// Some native dependencies need special handling
|
||||
nativePlugin,
|
||||
// Optional node dependencies can be safely ignored
|
||||
new webpack.IgnorePlugin({
|
||||
checkResource: resource => ignoredResources.has(resource)
|
||||
}),
|
||||
new MonacoWebpackPlugin()
|
||||
],
|
||||
optimization: {
|
||||
// Split and reuse code across the various entry points
|
||||
splitChunks: {
|
||||
chunks: 'all'
|
||||
},
|
||||
// Only minimize if we run webpack in production mode
|
||||
minimize: production,
|
||||
minimizer: [
|
||||
new TerserPlugin({
|
||||
exclude: /^(lib|builtins)\//
|
||||
})
|
||||
]
|
||||
},
|
||||
ignoreWarnings: [
|
||||
// Some packages do not have source maps, that's ok
|
||||
/Failed to parse source map/,
|
||||
// require with expressions are not supported
|
||||
/the request of a dependency is an expression/,
|
||||
// Some packages use dynamic requires, we can safely ignore them (they are handled by the native webpack plugin)
|
||||
/require function is used in a way in which dependencies cannot be statically extracted/, {
|
||||
module: /yargs/
|
||||
}, {
|
||||
module: /node-pty/
|
||||
}, {
|
||||
module: /require-main-filename/
|
||||
}, {
|
||||
module: /ws/
|
||||
}, {
|
||||
module: /express/
|
||||
}, {
|
||||
module: /cross-spawn/
|
||||
}, {
|
||||
module: /@parcel\/watcher/
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
config,
|
||||
nativePlugin,
|
||||
ignoredResources
|
||||
};
|
||||
Reference in New Issue
Block a user