72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
'use strict';
|
|
const {ProvidePlugin} = require('webpack');
|
|
const filterObject = require('filter-obj');
|
|
|
|
function createAliasFilter({includeAliases, excludeAliases}) {
|
|
if (includeAliases.length > 0) {
|
|
return object => filterObject(object, key => includeAliases.includes(key));
|
|
}
|
|
|
|
return object => filterObject(object, key => !excludeAliases.includes(key));
|
|
}
|
|
|
|
module.exports = class NodePolyfillPlugin {
|
|
constructor(options = {}) {
|
|
this.options = {
|
|
excludeAliases: [],
|
|
includeAliases: [],
|
|
...options
|
|
};
|
|
|
|
if (this.options.includeAliases.length > 0 && this.options.excludeAliases.length > 0) {
|
|
throw new Error('excludeAliases and includeAliases are mutually exclusive');
|
|
}
|
|
}
|
|
|
|
apply(compiler) {
|
|
const filter = createAliasFilter(this.options);
|
|
|
|
compiler.options.plugins.push(new ProvidePlugin(filter({
|
|
Buffer: [require.resolve('buffer/'), 'Buffer'],
|
|
console: require.resolve('console-browserify'),
|
|
process: require.resolve('process/browser')
|
|
})));
|
|
|
|
compiler.options.resolve.fallback = {
|
|
...filter({
|
|
assert: require.resolve('assert/'),
|
|
buffer: require.resolve('buffer/'),
|
|
console: require.resolve('console-browserify'),
|
|
constants: require.resolve('constants-browserify'),
|
|
crypto: require.resolve('crypto-browserify'),
|
|
domain: require.resolve('domain-browser'),
|
|
events: require.resolve('events/'),
|
|
http: require.resolve('stream-http'),
|
|
https: require.resolve('https-browserify'),
|
|
os: require.resolve('os-browserify/browser'),
|
|
path: require.resolve('path-browserify'),
|
|
punycode: require.resolve('punycode/'),
|
|
process: require.resolve('process/browser'),
|
|
querystring: require.resolve('querystring-es3'),
|
|
stream: require.resolve('stream-browserify'),
|
|
/* eslint-disable camelcase */
|
|
_stream_duplex: require.resolve('readable-stream/lib/_stream_duplex'),
|
|
_stream_passthrough: require.resolve('readable-stream/lib/_stream_passthrough'),
|
|
_stream_readable: require.resolve('readable-stream/lib/_stream_readable'),
|
|
_stream_transform: require.resolve('readable-stream/lib/_stream_transform'),
|
|
_stream_writable: require.resolve('readable-stream/lib/_stream_writable'),
|
|
string_decoder: require.resolve('string_decoder/'),
|
|
/* eslint-enable camelcase */
|
|
sys: require.resolve('util/'),
|
|
timers: require.resolve('timers-browserify'),
|
|
tty: require.resolve('tty-browserify'),
|
|
url: require.resolve('url/'),
|
|
util: require.resolve('util/'),
|
|
vm: require.resolve('vm-browserify'),
|
|
zlib: require.resolve('browserify-zlib')
|
|
}),
|
|
...compiler.options.resolve.fallback
|
|
};
|
|
}
|
|
};
|