Как я могу отредактировать поле localIdentName
в css-loader
в конфигурации Webpack в Nextjs, чтобы я мог хешировать / скрывать / скрывать имена классов css?
Пример ниже взят из New York Times. Обратите внимание на названия классов:
Как я могу отредактировать поле localIdentName
в css-loader
в конфигурации Webpack в Nextjs, чтобы я мог хешировать / скрывать / скрывать имена классов css?
Пример ниже взят из New York Times. Обратите внимание на названия классов:
К сожалению, в Nextjs
нет встроенной поддержки для передачи пользовательской конфигурации Webpack
загрузчикам. Но мы можем обойти это, используя next.config.js
.
Сначала создайте next.config.js
в корне каталога вашего проекта.
Если вы используете Webpack 5 или (Next.js 10.2 или более новую версию), используйте этот код:
module.exports = {
webpack(config, { buildId, dev, isServer, defaultLoaders, webpack }) {
config.module.rules[2].oneOf.forEach((moduleLoader, i) => {
Array.isArray(moduleLoader.use) &&
moduleLoader.use.forEach((l) => {
if (
l.loader.includes('\\css-loader') &&
!l.loader.includes('postcss-loader')
) {
const { getLocalIdent, ...others } = l.options.modules;
l.options = {
...l.options,
modules: {
...others,
localIdentName: '[hash:base64:6]',
},
};
}
});
});
return config;
},
};
В противном случае используйте это:
module.exports = {
webpack(config, { buildId, dev, isServer, defaultLoaders, webpack }) {
config.module.rules[1].oneOf.forEach((moduleLoader, i) => {
Array.isArray(moduleLoader.use) &&
moduleLoader.use.forEach((l) => {
if (
l.loader.includes('\\css-loader') &&
!l.loader.includes('postcss-loader')
) {
const { getLocalIdent, ...others } = l.options.modules;
l.options = {
...l.options,
modules: {
...others,
localIdentName: '[hash:base64:6]',
},
};
}
});
});
return config;
},
};
Если вы хотите хешировать имена классов только в производственной среде, вы можете использовать process.env.NODE_ENV
с оператором if
. Нравится:
module.exports = {
webpack(config, { buildId, dev, isServer, defaultLoaders, webpack }) {
if (process.env.NODE_ENV === "production") {
...
...
return config;
} else {
return config;
}
},
};
У меня это сработало с использованием Next.js 11:
module.exports = {
webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
config.module.rules[3].oneOf.forEach((moduleLoader, i) => {
Array.isArray(moduleLoader.use) &&
moduleLoader.use.forEach((l) => {
if (
l.loader.includes('\\css-loader') &&
!l.loader.includes('postcss-loader')
) {
const { getLocalIdent, ...others } = l.options.modules;
l.options = {
...l.options,
modules: {
...others,
localIdentName: '[hash:base64:6]',
},
};
}
});
});
return config;
},
};