UNPKG

jsrunner-bundler

Version:

NPM Bundler (sources & types) for the JavaScript Runner

122 lines (106 loc) 3.01 kB
const path = require('path'); const fs = require('fs'); const webpack = require('webpack'); const NodePolyfillPlugin = require('node-polyfill-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const entryFiles = ['./src/polyfills.js', './src/index.js'].filter(f => fs.existsSync(f)); module.exports = { mode: 'production', target: 'web', entry: entryFiles, output: { path: path.resolve(__dirname, './dist'), filename: 'jsrunner.js', library: { type: 'module', // name: 'JsRunner', // eliminar esta línea }, environment: { module: true, }, }, experiments: { outputModule: true, }, resolve: { mainFields: ['browser', 'module', 'main'], extensions: ['.js', '.json'], alias: { 'node:tty': 'tty-browserify', // para compatibilidad con node: imports }, fallback: { fs: false, net: false, tls: false, child_process: false, tty: require.resolve('tty-browserify'), path: require.resolve('path-browserify'), stream: require.resolve('stream-browserify'), crypto: require.resolve('crypto-browserify'), os: require.resolve('os-browserify/browser'), assert: require.resolve('assert/'), url: require.resolve('url/'), querystring: require.resolve('querystring-es3'), buffer: require.resolve('buffer/'), http: require.resolve('stream-http'), https: require.resolve('https-browserify'), zlib: require.resolve('browserify-zlib'), }, }, plugins: [ // Reemplaza `node:fs` `fs`, etc. new webpack.NormalModuleReplacementPlugin(/^node:(.+)$/, resource => { resource.request = resource.request.replace(/^node:/, ''); }), new NodePolyfillPlugin(), new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'], }), new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1, }), ], module: { rules: [ { test: /\.m?js$/, resolve: { fullySpecified: false }, // Puedes quitar babel si no usas import() dinámico // Si lo dejas, asegúrate de tener babel-loader instalado /* use: { loader: 'babel-loader', options: { plugins: ['dynamic-import-node'] }, }, */ }, ], }, optimization: { splitChunks: false, runtimeChunk: false, concatenateModules: false, usedExports: true, sideEffects: false, minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { format: { comments: false }, compress: { drop_console: true }, }, extractComments: false, }), ], }, stats: { all: false, errors: true, warnings: true, timings: true, assets: true, builtAt: true, colors: true, }, };