【发布时间】:2016-06-19 10:40:37
【问题描述】:
我无法将我的 webpack 配置从使用现已弃用的 cssnext 和 cssnext-loader 转换为 postcss-cssnext 和 postcss-loader。 Doc 清楚地表明我正在尝试重新创建的功能已被委派给特定插件的功能,但我似乎无法让事情正常工作。这方面的一个例子是 css 变量。
我当前的工作 webpack 配置是这样的:
...插件导入
var cssnext = require('cssnext');
var autoprefixer = require('autoprefixer');
var customMedia = require("postcss-custom-media");
...加载器配置
module: {
loaders: [{
test: /\.css$/,
loader: "style-loader!css-loader!postcss-loader!cssnext-loader",
include: path.join(__dirname, 'src')
}]
},
...postcss 配置
postcss: function() {
return [customMedia(), cssnext(), autoprefixer()];
}
问题:
我换掉了我的 cssnext 导入以指向新的 postcss-cssnext 模块,并添加到现在需要的模块中来处理我的 css 变量(postcss-custom-properties)。我还删除了 cssnext-loader 并假设 postcss-loader 可以处理事情???
...插件导入
var cssnext = require('postcss-cssnext');
var autoprefixer = require('autoprefixer');
var customMedia = require("postcss-custom-media");
var customProperties = require('postcss-custom-properties');
...加载器配置
module: {
loaders: [{
test: /\.css$/,
loader: "style-loader!css-loader!postcss-loader",
include: path.join(__dirname, 'src')
}]
},
...postcss 配置
postcss: function() {
return [customMedia(), cssnext(), customProperties(), autoprefixer()];
}
我可以看到我的所有样式都被渲染到页面上,但没有一个 css 变量被评估。中心问题似乎与“cssnext-loader”的使用有关。如果我重新添加它,变量就会起作用。 我确实玩过 postcss-import 和各种配置迭代,但似乎没有任何效果。有人知道我做错了什么吗?如何让 postcss-cssnext、postcss-loader、css 变量和 webpack 一起工作?
【问题讨论】:
-
您当前的配置只是多余的。如果您使用的是 cssnext-loader,那么您在 postcss-loader 中使用的插件只是重复的(嗯,cssnext 作为插件包含的 customMedia 和 autoprefixer 的重复,以及 cssnext-loader 也...)
-
因此,如果我想要自定义媒体、css 变量和自动前缀,我应该只使用 postcss-loader,就像我在第二个示例中一样,并且只使用 customProperties?如果是这样,我已经尝试了它以及其他一些配置(这里列出的太多了)。作为说明,我在主 css 文件中使用 @import 语句。这是参考我玩 postcss-import 的。