Как заставить postcss-loader, postcss-cssnext и sass-loader работать вместе в веб-пакете?
Это мое Webpack
конфиги для scss/css
файлы.
...
{
test: /\.s?css$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 2 } },
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
plugins: loader => [
require('postcss-import')({ root: loader.resourcePath }),
require('cssnano')(),
require('postcss-cssnext')(),
]
}
},
'sass-loader',
]
}
...
Проблема в том, что когда я использую cssnext
функции как gray(100)
, выход CSS
В файле есть пустое значение, в которое была помещена функция. Я хотел бы знать, что я сделал не так здесь.
т.е.background-color: gray(100);
выходы на background-color: ;
Я новичок в postcss, поэтому я пока не знаю, как это работает и как правильно его настроить.
1 ответ
Для вашей точной проблемы, cssnext
функции, вы должны поставить cssnano
после postcss-cssnext
как показано ниже:
...
{
test: /\.s?css$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 2 } },
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
plugins: loader => [
require('postcss-import')({ root: loader.resourcePath }),
require('postcss-cssnext')(),
require('cssnano')(),
]
}
},
'sass-loader',
]
}
...
НО я не знаю, почему вы использовали sass-loader
? когда у тебя есть postcss
в вашем проекте.
На самом деле PostCSS
может выполнять всю работу, как sass
еще лучше, это зависит от стиля синтаксиса, я предлагаю посмотреть THIS REPO
, он имеет полную конфигурацию PostCSS
на Webpack
также в этом репо SCSS
синтаксис используется.
Для наглядности напишу часть конфигурации ниже:
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules\/)/,
use: [
{
loader: 'babel-loader',
}
]
},
{
test: /\.pcss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
{
loader: 'css-loader',
options: {
modules: true,
importLoaders: 1,
localIdentName: '[hash:base64:10]',
sourceMap: false,
}
},
{
loader: 'postcss-loader',
options: {
config: {
path: `${__dirname}/../postcss/postcss.config.js`,
}
}
}
]
})
}
]
Даже я использую *.pcss
вместо *.scss
, *.sass
или же *.css
Это просто для последовательности и не отличается.
PostCSS
Конфигурация находится в отдельном файле, это:
module.exports = {
ident: 'postcss',
syntax: 'postcss-scss',
map: {
'inline': true,
},
plugins: {
'postcss-partial-import': {
'prefix': '_',
'extension': '.pcss',
'glob': false,
'path': ['./../src/styles']
},
'postcss-nested-ancestors': {},
'postcss-apply': {},
'postcss-custom-properties': {},
'postcss-nested': {},
'postcss-cssnext': {
'features': {
'nesting': false
},
'warnForDuplicates': false
},
'postcss-extend': {},
'css-mqpacker': {
'sort': true
},
'autoprefixer': {
'browsers': ['last 15 versions']
},
}
};
Абсолютно cssnext
хорошо работает, я использовал color()
функция, и она работает хорошо.