CSS autoprefixer с webpack
Я пытался настроить webpack с помощью LESS и Autoprefixer, но autoprefixer, похоже, не работает. Мои css или менее файлы не являются autoprefixed. Образец:
display: flex
остается display: flex
Я поставил свою конфигурацию webpack ниже:
var autoprefixer = require('autoprefixer');
module.exports = {
entry: {
bundle: "./index.jsx"
},
output: {
path: __dirname,
filename: "[name].js"
},
module: {
loaders: [
{
test: /.jsx$/,
exclude: /(node_modules|bower_components)/,
loaders: ['react-hot', 'babel-loader']
},
{
test: /.less$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader!postcss-loader!less-loader")
},
{
test: /.css$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader!postcss-loader")
}
],
postcss: function () {
return [autoprefixer];
}
},
plugins: [
new webpack.BannerPlugin(banner),
new ExtractTextPlugin("style.css")
],
devtool: 'source-map',
devServer: {
stats: 'warnings-only',
}
};
4 ответов
Так нашел проблему. Глупый я, блок postcss должен быть непосредственно под конфигурацией webpack, я поместил его в блок модулей. моя ошибка.
EDIT: вот как это должно было быть:
var autoprefixer = require('autoprefixer');
module.exports = {
...
postcss: function () {
return [autoprefixer];
}
...
};
поэтому вместо того, чтобы помещать его в блок модулей, я должен был поместить его непосредственно под основным блоком, как показано выше.
вам нужно будет настроить postcss в конфигурации webpack для более старых версий браузера.
по умолчанию для autoprefixer последние 2 версии браузеров или браузеров, которые имеют не менее 5% доли рынка.
https://github.com/postcss/autoprefixer#browsers
postcss: [
autoprefixer({
browsers: ['last 3 versions', '> 1%']
})
],
Он говорит, что вы поддерживаете последние 3 версии браузеров или браузеров, которые имеют по крайней мере 1% доли рынка.
у меня была аналогичная проблема с Webpack 2.х.х и пользовательские свойства больше не разрешены в конфигурации. Я нашел решение на этом другом посте S. O:использование автоматического префикса с postcss в webpack 2.0. В случае, если по какой-то неизвестной причине эта ссылка ведет к 404 я скомпилировать наиболее релевантные ответы здесь:
Webpack 2.х.х ввел webpack.LoaderOptionsPlugin () плагин, где вам нужно определить все Плагины опции загрузчика. Например, autoprefixer-это плагин для postcss-loader. Значит, он должен быть здесь. Новая конфигурация должна выглядеть так:
module: {
rules: [
{
test: /\.scss$/,
loaders: ['style-loader', 'css-loader', 'sass-loader',
'postcss-loader']
}
]
},
plugins: [
new webpack.LoaderOptionsPlugin({
options: {
postcss: [
autoprefixer(),
]
}
})
],
это сработало для меня, но, как упоминал Крейг, нет необходимости в LoaderOptionsPlugin(). Теперь вы можете передать параметры непосредственно в объявление загрузчика:
const autoprefixer = require('autoprefixer');
let settings = {
/*...*/
module: {
rules: [{
test: /\.css$/,
use: [
/*...other loaders...*/
{
loader: 'postcss-loader',
options: {
plugins: function () {
return [autoprefixer]
}
}
}
/*...other loaders...*/
]
}]
}
}
/*...*/
дело в том, что я пробовал 2nd с Webpack 2.5.1, но это не удалось. Кредиты идут Пранешу Рави и Крейгу.
как написано в документация Autoprefixer, "Autoprefixer использует Browserslist"
на документация Browserslist, рекомендуется разместить browserslist в
package.json
.
так вот еще один способ используйте autoprefixer с webpack:
установите postcss-загрузчик и autoprefixer:
npm i -D postcss-loader autoprefixer
webpack.config.js
module: {
rules: [
{
test: /\.scss$/,
exclude: /node_modules/,
use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader', 'postcss-loader']
},
...
]
}
по состоянию на документация postcss, the
postcss-loader
должен быть помещен послеcss-loader
иstyle-loader
, но до другие загрузчики препроцессоров, такие как e.gsass|less|stylus-loader
, если вы используете какой-либо.
package.json
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"last 2 version",
"not dead",
"iOS >= 9"
]
таким образом, вам не нужно .