Плагин Webpack
Плагин webpack для UnoCSS: @unocss/webpack
. В настоящее время этот плагин поддерживает только глобальный
режим.
INFO
Этот плагин не поставляется с какими-либо пресетами по умолчанию.
Предварительные требования
@unocss/webpack
требует style-loader
и css-loader
для обработки CSS-файлов.
Установка
pnpm add -D @unocss/webpack
yarn add -D @unocss/webpack
npm install -D @unocss/webpack
bun add -D @unocss/webpack
Начиная с версии UnoCSS v0.59.0
, UnoCSS был перемещен в режим ESM-only, вам нужно загрузить вашу конфигурацию через динамический импорт:
// webpack.config.js
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
}))
}
// webpack.config.js
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
plugins: [
UnoCSS()
],
css: {
extract: {
filename: '[name].[hash:9].css'
},
},
}))
}
Если вы используете более старую версию UnoCSS, вы можете использовать следующий код:
// webpack.config.js
const UnoCSS = require('@unocss/webpack').default
module.exports = {
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
}
// webpack.config.js
const UnoCSS = require('@unocss/webpack').default
module.exports = {
plugins: [
UnoCSS()
],
css: {
extract: {
filename: '[name].[hash:9].css'
}
}
}
Создайте файл uno.config.ts
:
import { defineConfig } from 'unocss'
export default defineConfig({
// ...Параметры UnoCSS
})
WARNING
Если вы используете webpack@4.x, конфигурация optimization.realContentHash
не поддерживается, и вы должны использовать css.extract.filename
для настройки имени CSS-файла (мы используем первые 9 букв хеш-кода в качестве примера). Остерегайтесь этой известной проблемы с бандлингом и webpack#9520.
Использование
Добавьте uno.css
в вашу основную точку входа:
import 'uno.css'
Фреймворки
Vue + Vue CLI
Если вы используете Vue CLI с webpack 4/5 с UnoCSS v0.59.0
, вам нужно использовать последнюю Vue CLI Service v5.0.8
для загрузки вашей конфигурации с динамическим импортом:
// vue.config.js
const process = require('node:process')
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css'
}
: true
}
}))
}
// vue.config.js
const process = require('node:process')
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
configureWebpack: {
plugins: [
UnoCSS({})
]
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
chunkFilename: '[name].[hash:9].css'
}
: true
}
}))
}
Если используется более старая версия UnoCSS, вы можете использовать следующий код:
// vue.config.js
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default
module.exports = {
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css'
}
: true
},
}
// vue.config.js
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default
module.exports = {
configureWebpack: {
plugins: [
UnoCSS({}),
]
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
chunkFilename: '[name].[hash:9].css',
}
: true,
},
}