const {join, resolve} = require('path'); const ringUiWebpackConfig = require('@jetbrains/ring-ui/webpack.config'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const pkgConfig = require('./package.json').config; const componentsPath = join(__dirname, pkgConfig.components); // Patch @jetbrains/ring-ui svg-sprite-loader config ringUiWebpackConfig.loaders.svgInlineLoader.include.push( require('@jetbrains/logos'), require('@jetbrains/icons') ); const webpackConfig = () => ({ entry: `${componentsPath}/root.tsx`, resolve: { mainFields: ['module', 'browser', 'main'], extensions: ['.tsx', '.ts', '.js', '.svg'], alias: { react: resolve('./node_modules/react'), 'react-dom': resolve('./node_modules/react-dom'), '@jetbrains/ring-ui': resolve('./node_modules/@jetbrains/ring-ui') } }, output: { path: resolve(__dirname, pkgConfig.dist), filename: '[name].js', publicPath: '', devtoolModuleFilenameTemplate: '/[absolute-resource-path]' }, module: { rules: [ ...ringUiWebpackConfig.config.module.rules, { test: /\.s[ac]ss$/i, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', ], include: componentsPath, exclude: ringUiWebpackConfig.componentsPath, }, { test: /\.tsx?$/, use: [ { loader: 'ts-loader', options: { transpileOnly: true } } ] } ] }, plugins: [ new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output // both options are optional filename: '[name].css', chunkFilename: '[id].css', }), ], output: { path: __dirname + '/dist/' } }); module.exports = webpackConfig;