gpt4 book ai didi

webpack - ExtractTextPlugin 和 postCSS - 自动前缀不起作用

转载 作者:行者123 更新时间:2023-12-04 19:00:17 24 4
gpt4 key购买 nike

我正在尝试设置 webpack 以进行编译,它扫描一个文件树中的所有 css 文件,然后生成一个 css 文件,其中包含所有样式的捆绑、自动前缀和最小化。

我无法让 autoprefixer 插件工作。

这是相关的 webpack 配置部分:

const webpack = require('webpack')
const path = require('path')
const glob = require('glob')
const ExtractTextPlugin = require('extract-text-webpack-plugin');

// postCSS plugins
const autoprefixer = require('autoprefixer')

module.exports = [
{
// another compilation pass
},
{
name: 'static-css',
entry: {
vendor: glob.sync(path.join(__dirname, 'assets/stylesheets/vendor/**/*.css')),
styles: glob.sync(path.join(__dirname, 'assets/stylesheets/src/**/*.css'))
},
devtool: 'source-map',
output: {
path: path.join(__dirname, 'assets/stylesheets/build/'),
filename: 'bundle.js',
},
module: {
loaders: [
// css loader for custom css
{
test: /\.css$/,
include: path.join(__dirname, 'assets/stylesheets/src'),
loader: ExtractTextPlugin.extract('style-loader', 'css-loader!postcss-loader')
},
// css loader for vendor css
{
test: /\.css$/,
include: path.join(__dirname, 'assets/stylesheets/vendor'),
loader: 'style-loader!css-loader'
},
// other loaders for images, fonts, and svgs
{
test: /\.png$/,
loader: 'url-loader?limit=100000'
},
{
test: /\.jpg$/,
loader: 'file-loader'
},
{
test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url?limit=10000&mimetype=application/font-woff'
},
{
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url?limit=10000&mimetype=application/octet-stream'
},
{
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: 'file'
},
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url?limit=10000&mimetype=image/svg+xml'
}
],
postcss: function() {
return [
autoprefixer
]
}
},
plugins: [
// extract css in a .css file
new ExtractTextPlugin('[name].css')
]
}
];

当我运行 webpack 时,我将所有文件压缩在 bundle.js 中,并在单独的 styles.css 中正确解压缩文件。但不应用供应商前缀。

我正在使用这个类来测试前缀:

.autoprefixer-test {
display: flex;
transition: all .5s;
background: linear-gradient(to bottom, white, black);
user-select: none;
}

我试图改变对 ExtractTextPlugin.extract 的调用,如 ExtractTextPlugin.extract('style-loader', ['css-loader', 'postcss-loader'])正如在其他帖子中看到的那样,但它根本没有帮助。

有任何想法吗?

最佳答案

你好像把 postcss 放错了地方参数。根据 https://github.com/postcss/postcss-loader 处的文档下面的代码应该放在你的配置的顶层,而不是在 module 下部分:

postcss: function() {
return [
autoprefixer
]
}

更新。

事实上,为了使 postcss 和 webpack 的这种集成工作,还有更多的配置需要编写。感谢以下线程,我找到了解决方案 https://github.com/postcss/postcss-loader/issues/8

首先,为了 postcss能够在 @import 上工作'ed 文件, postcss-import需要使用插件。为了将此插件与 webpack 集成(例如,启用文件监视以进行热重载或重建),从初始化程序的函数参数中获取的特殊参数将作为参数传递给 postcssImport像这样:
var autoprefixer = require('autoprefixer');
var postcssImport = require('postcss-import');
....
postcss: function(webpack) {
return [
postcssImport({ addDependencyTo: webpack }), // should be first
autoprefixer
];
]

可悲的是,这会在使用 url(...) 时通过 webpack 破坏资源加载。与相对路径。这是因为 postcss-import合并所有 @import 'ed 文件合并为一个,但路径仍然相对于文件的初始目录。为了重写相对路径, postcss-url应该使用插件并且配置现在看起来像这样:
var autoprefixer = require('autoprefixer');
var postcssImport = require('postcss-import');
var postcssUrl = require('postcss-url');
....
postcss: function(webpack) {
return [
postcssImport({ addDependencyTo: webpack }),
postcssUrl(),
autoprefixer
];
]

关于webpack - ExtractTextPlugin 和 postCSS - 自动前缀不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39015748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com