小王子抓猫咪
2017-02-15 18:51
/* webpack 2.0 */
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader?importLoaders=1',
// query:{
// importLoaders : 1
// }
},
{
loader: 'postcss-loader',
options: {
plugins:function(){
return [
require('autoprefixer')({
browsers: ["last 5 versions"]
})
];
}
}
}
]
}老师,在webpack2.0里面,如果是在一个CSS里面import另外一个CSS文件。
使用上面的loader配置,会报错
ERROR in ./~/css-loader?importLoaders=1!./~/postcss-loader?{}!./css/common.css
Module build failed: Error: No PostCSS Config found in: E:\webfrontend\npmstudy\webpack-first-demo\css
at Error (native)
at E:\webfrontend\npmstudy\webpack-first-demo\node_modules\postcss-load-config\index.js:51:26
@ ./~/css-loader?importLoaders=1!./~/postcss-loader?{}!./css/layer.css 3:10-134
@ ./css/layer.css
@ ./index.js我是按照postcss-loader的npm官网上的实例配置的
https://www.npmjs.com/package/postcss-loader
这是什么呢?
此题,我已经在下面自问自答了各位。
主要还是找不到post-css 的配置,你安装了 postcss-load-config ?你可以在项目下新建一个 postcss.config.js 来解决,webpack 中就不用写了
Module build failed: Error: No PostCSS Config found in: E:\webfrontend\npmstudy\webpack-first-demo\css
at Error (native)
at E:\webfrontend\npmstudy\webpack-first-demo\node_modules\postcss-load-config\index.js:51:26
@ ./~/css-loader?importLoaders=1!./~/postcss-loader?{}!./css/layer.css 3:10-134
@ ./css/layer.css
@ ./index.js
对于一直抱着个错误,”Module build failed: Error: No PostCSS Config found in“
今天我仔细看了一下官方文档,官网有作解释:
webpack.config.js
{
loader: 'postcss-loader',
options: {
plugins: (loader) => [
require('postcss-import')({
root: loader.resourcePath
}),
require('postcss-cssnext')(),
require('autoprefixer')(),
require('cssnano')()
]
}}
官网:https://www.npmjs.com/package/postcss-loader。
着这里我贴出我的代码:
module.exports = {
//配置生成source maps,选择合适的选项
devtool:'eval-source-map',
//入口
entry:__dirname + "/app/main.js",
//输出
output:{
path:__dirname + "/dist/js",
filename:"bundle.js"
},
//Loader
module: {
loaders: [
{
test: /\.json$/,
loader: "json-loader"
},
{
test:/\.js$/,
exclude:/node_modules/,
loader:'babel-loader',
query:{
presets:['es2015','react']
}
},
{
test:/\.css$/,
//loader:'style-loader!css-loader!postcss-loader' //添加对样式表的处理
use:[
{
loader:'style-loader'
},
{
loader:'css-loader',
options:{
importLoaders:1
}
},
{
loader:'postcss-loader',
options: { // 如果没有options这个选项将会报错 No PostCSS Config found
plugins: (loader) => [
require('postcss-import')({root: loader.resourcePath}),
require('postcss-cssnext')(),
require('autoprefixer')(), //CSS浏览器兼容
require('cssnano')() //压缩css
]
}
}
]
},
]
},
}

加上这个参数
var htmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
entry: './src/app.js',
output:{
path: __dirname + '/dist',
filename:'js/[name].bundle.js',
//publicPath:'http://cdn.com/' //网站上线的地址
},
module:{
rules:[
{
test: /\.js$/,
//include:__dirname + './src/',//选择范围
//exclude:__dirname + './node_modules/',//排除范围
exclude: [
path.resolve(__dirname, "node_modules/")
],//排除范围
include: [
path.resolve(__dirname, "src")
],//选择范围
loader:'babel-loader',
options: {
presets: ['env']
}
},
{
test:/\.css$/,
use:[
'style-loader',
{loader:'css-loader',options:{importLoaders:1}},
{
loader:'postcss-loader',
options:{
plugins:function(){
return [
require('postcss-import')(), //一定要写在require("autoprefixer")前面,否则require("autoprefixer")无效
require("autoprefixer")({browsers:['last 5 versions']})
]
}
}
}
]
}
]
},
plugins: [
new htmlWebpackPlugin({
filename:'index.html',
template:'index.html',
inject:'body'
})
]
}
var htmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry :'./src/app.js',
output : {
path :__dirname+ './dist',
filename : 'js/[name].bundle.js'
},
module : {
rules : [
{
test : /\.js$/,
loader : 'babel-loader',
exclude : path.resolve(__dirname,'node_modules'),
include : __dirname+'./src/',
query : {
presets : ['latest']
}
},
{
test : /\.css$/,
use : [
{
loader : 'style-loader'
},
{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
{
loader: 'postcss-loader'
}
]
}
]
},
plugins : [
new htmlWebpackPlugin({
filename : 'index.html',
template : 'index.html',
inject : 'body'
}),
new webpack.LoaderOptionsPlugin({
options : {
postcss : function(){
return [
require('autoprefixer')({
broswers : ['last 5 versions']
})
];
}
}
})
]
}
以上代码后打包成功,但是运行报错


请问是怎么解决呢?
大神,你好,我现在就是按照你上面的写的配置的,但是还是说postcss的配置没找到,以下是源码和报错截图,麻烦大神看看
var path = require('path');
var htmWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');
module.exports={
context: __dirname,
entry: './src/app.js',
output:{
path: path.resolve(__dirname,'dist'),
filename: 'js/[name].bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: __dirname+'./node_modules',
include: __dirname+'./src/',
options: {
'presets': ['latest']
}
},
{
test: /\.css$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader',
options: {
importLoaders:1
}
},
{
loader: 'postcss-loader'
}
]
}
]
},
plugins: [
new htmWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: 'body'
}),
new webpack.LoaderOptionsPlugin({
options: {
postcss: function(){
return [
require('autoprefixer')({
broswers: ['last 5 versions']
})
]
}
}
})
]
}
{
loader:"postcss-loader",
options:{
plugins:function(){
return [
require('precss'),
require('autoprefixer')
]
}
}
}在 require('autoprefixer') 之前加入 require('precss') 就可以了,不过还是不太明白原理,precss 插件从介绍来看应该是用来支持saas语法的。
webpack.LoaderOptionsPlugin 是webpack 1 向 2 迁移时用的方法。
附上LESS 方法
{
test: /\.less$/,
use: [
'style-loader', 'css-loader', {
loader: "postcss-loader",
options: {
plugins: function() {
return [
require('autoprefixer')
];
}
}
}, 'less-loader'
]
}
附上 less 配置
{
test: /\.less$/,
use: [
'style-loader', 'css-loader', {
loader: "postcss-loader",
options: {
plugins: function() {
return [
require('autoprefixer')
];
}
}
}, 'less-loader'
]
}
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname,'src'),
exclude: path.resolve(__dirname,'node_modules'),
loader: "babel-loader"
},
{
test: /\.css$/,
use: [
'style-loader', {
loader: 'css-loader',
options: {
// modules: true // 设置css模块化
}
}, {
loader: 'postcss-loader',
options: {
plugins: function() {
return [
require('precss'),
require('autoprefixer')
];
}
}
}
]
}
//require('precss'), 加上这个就可以了 不用加额外的东西 安装下 precss webpack2 不支持css-loader 后面加参数了。。。。
var htmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry : './src/app.js',
output : {
path : './dist',
filename : 'js/[name].bundle.js'
},
module : {
rules : [
{
test : /\.js$/,
loader : 'babel-loader',
exclude : path.resolve(__dirname,'node_modules'),
//exclude : './node_modules/',
include : './src/',
// 编译语言,方式1,方式2在package.json文件中
query : {
presets : ['latest']
}
},
{
test : /\.css$/,
use : [
{
loader : 'style-loader'
},
{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
{
loader: 'postcss-loader'
// options : {
// plugins : function() {
// return [
// require('autoprefixer')({
// broswers : ['last 5 versions']
// })
// ];
// }
// }
}
]
}
]
},
plugins : [
new htmlWebpackPlugin({
filename : 'index.html',
template : 'index.html',
inject : 'body'
}),
new webpack.LoaderOptionsPlugin({
options : {
postcss : function(){
return [
require('autoprefixer')({
broswers : ['last 5 versions']
})
];
}
}
})
]
}
必须得配置postcss.config.js么?我也是按照官网在webpack.config.js中配置的,然后一样的错误,怎么解决的昂?= =求告知0.0

也还是不行
module:{
rules:[
{
test:/\.js$/,
include:path.resolve(__dirname,'src'),
exclude:path.resolve(__dirname,'node_modules'),
use: 'babel-loader'
},
{
test:/\.css$/,
use:[ 'style-loader', 'css-loader?importLoaders=1',
{
loader:'postcss-loader',
options:{
plugins:function(){
return [
require('autoprefixer')({broswers:['last 5 versions']})
];
}
}
} ]
},
]
},不添加新的配置文件,这样写可以通过
css-loader 文档已经更新,推荐使用下面数组的方式,可以使用
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
}
第二种方式的问题已经找到解决方案
在webpack2.0里的webpack.config.js中,已经不在允许用户自定义options的key值了。也就是说不能在
module.exports={...}这里面将postcss作为一个Key啦。错误提示告诉用户,需要使用
LoaderOptionsPlugin
//解决方案
module.exports = {
plugins: [
new webpack.LoaderOptionsPlugin({
options: {
postcss: function(){
return [
require("autoprefixer")({
browsers: ['ie>=8','>1% in CN']
})
]
}
}
})
]
}
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
{
loader: 'postcss-loader'
}
]新建postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')({
browsers: ["last 5 versions"]
})
]
}这种方式可行。
目前还不知道为什么第二种方式不行!
不给css-loader加参数importLoaders=1 是能够正常打包的,不会提示错误。但是对于包含@import方式的css就不能进行前缀等转换了。
但是加上importLoaders=1 再打包就会报错了。
我真不知道具体原因是什么。
webpack深入与实战
86554 学习 · 750 问题
相似问题