From b3beca15595c7cf3fa8c9f3d7d1276e5b0e57a5f Mon Sep 17 00:00:00 2001 From: Pavel Mineev Date: Wed, 5 May 2021 22:15:57 +0300 Subject: [PATCH] make classnames short --- frontend/package-lock.json | 6 ++++++ frontend/package.json | 1 + frontend/webpack.config.js | 29 +++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 576170d5..254aa37b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7473,6 +7473,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "incstr": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/incstr/-/incstr-1.2.3.tgz", + "integrity": "sha512-ySi29Lzdc3QnB1LzZgRf5kl59m5tPucNagrAyJJ9rWz4+Pa6IxAHSNyUHYvEvaj6QPwWAY2/thi3Rxt45qi3HQ==", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index f92383a2..d7437cc6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -87,6 +87,7 @@ "html-webpack-plugin": "^5.2.0", "husky": "^4.3.6", "identity-obj-proxy": "^3.0.0", + "incstr": "^1.2.3", "jest": "^26.6.3", "jest-fetch-mock": "^3.0.3", "jest-localstorage-mock": "^2.4.6", diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index eff7b852..f2c08197 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -9,6 +9,7 @@ const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const RefreshPlugin = require('@prefresh/webpack'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); +const incstr = require('incstr'); const babelConfig = require('./.babelrc.js'); const NODE_ID = 'remark42'; @@ -19,6 +20,29 @@ const DEVSERVER_BASE_PATH = process.env.DEVSERVER_BASE_PATH || 'http://127.0.0.1 const PUBLIC_FOLDER_PATH = path.resolve(__dirname, 'public'); const CUSTOM_PROPERTIES_PATH = path.resolve(__dirname, './app/custom-properties.css'); +const genId = incstr.idGenerator(); +const modulesMap = {}; + +function getLocalIdent(loaderContext, _, localName, options) { + if (!options.context) { + options.context = loaderContext.rootContext; + } + + const filepath = path.relative(options.context, loaderContext.resourcePath).replace(/\\/g, '/'); + + if (!modulesMap[filepath]) { + modulesMap[filepath] = { id: genId(), genId: incstr.idGenerator(), classNames: {} }; + } + + const m = modulesMap[filepath]; + + if (!m.classNames[localName]) { + m.classNames[localName] = m.genId(); + } + + return `${m.id}_${m.classNames[localName]}`; +} + /** * Generates excludes for babel-loader * @@ -130,9 +154,10 @@ module.exports = (_, { mode, analyze }) => { { loader: 'css-loader', options: { + importLoaders: 1, modules: { - mode: 'local', localIdentName: '[name]__[local]_[hash:5]', + getLocalIdent: isDev ? undefined : getLocalIdent, }, }, }, @@ -195,7 +220,7 @@ module.exports = (_, { mode, analyze }) => { const config = { entry, - devtool: 'source-map', + devtool: isDev ? 'source-map' : false, resolve, };