@cloudbase/utilities
Version:
cloudbase javascript sdk utilities
101 lines (98 loc) • 2.29 kB
JavaScript
const path = require('path')
const webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin')
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports = function (options) {
const { context, entry, output, mode, watch, externals, definePlugin = {}, optimization = {} } = options
const isDevelopment = mode !== 'production'
let plugins = [
new webpack.DefinePlugin(definePlugin),
// new BundleAnalyzerPlugin()
].filter((item) => !!item)
const BABEL_LOADER = {
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
modules: false,
targets: {
esmodules: true,
},
},
],
],
},
}
return {
context,
entry,
mode,
watch,
watchOptions: {
ignored: [output.path],
},
output,
externals,
cache: {
type: 'memory',
},
devtool: false,
resolve: {
extensions: ['.ts', '.js', '.json'],
},
module: {
rules: [
{
test: /\.ts$/,
exclude: [/node_modules/],
use: [
BABEL_LOADER,
{
loader: require.resolve('ts-loader'),
options: {
configFile: path.resolve(context, './tsconfig.esm.json'),
},
},
],
},
{
test: /\.js$/,
exclude: [/node_modules/],
use: [BABEL_LOADER],
},
{
test: /package\.json$/,
loader: 'package-json-cleanup-loader',
options: {
only: ['version'],
},
},
],
noParse: [/sjcl\.js$/],
},
plugins,
optimization: {
emitOnErrors: false,
removeEmptyChunks: true,
usedExports: true,
...optimization,
...(isDevelopment
? {
minimize: false,
removeAvailableModules: false,
concatenateModules: true,
}
: {
minimizer: [
new TerserPlugin({
test: /\.js(\?.*)?$/i,
cache: false,
parallel: true,
}),
],
}),
},
}
}