webpack中的那些坑

以前在简书上看到一个webpack入门(入门Webpack,看这篇就够了),讲得确实很清楚,可是由于博主用的是1.x的版本,和如今广泛默认安装的2.x版本有一些细节上的差距,因此实际使用的时候就会遇到一些坑,对于想入门的小白如我,形成了不小的困扰。因而,干脆整理了一下我遇到的各类报错,以备所需。css

一 loader

webpack 2.0以后,不能省略后缀-loadernode

二 postcss和autoprefixer配置

最开始直接把postcss写在module.exports的配置里,报错webpack

//webpack配置文件
module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/app/main.js",
  output: {...},

  module: {
    loaders: [
      {
        test: /\.json$/,
        loader: "json"
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel'
      },
      {
        test: /\.css$/,
        loader: 'style-loader!css-loader?modules!postcss-loader'
      }
    ]
  },

  postcss: [
    require('autoprefixer')//调用autoprefixer插件
  ],

  devServer: {...}
}

由于webpack 2.0以后,不容许用户直接修改配置文件,须要把postcss写入到plugins里面。报错信息如图web

clipboard.png

因而将postcss部分更改成json

plugins:[
        new webpack.LoaderOptionsPlugin({
            options:{
                 postcss: [
                    require('autoprefixer')//调用autoprefixer插件
                  ],
            }
        })
    ]

这时问题又来了,报错,提示语法错误,webpack没有被定义浏览器

clipboard.png

要解决这个问题,须要在整个webpack.config.js配置文件头部定义webpackbabel

var webpack = require('webpack');

最终的配置文件以下,此时能够正常运行webpack,看到css中被自动根据浏览器添加了前缀,autoprefixer调用成功app

//webpack配置文件
var webpack = require('webpack');

module.exports = {
    /*devtool: 'eval-source-map',*/

    entry: __dirname + '/app/main.js',

    output:{
        path: __dirname + '/public',
        filename: 'bundle.js'
    },

    module:{
        loaders:[
            {
                test: /\.json$/,
                loader: "json-loader"
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader:"babel-loader"

            },
            {
                test: /\.css$/,
                loader:"style-loader!css-loader?modules!postcss-loader"//增长modules以后,就会把css的类名传递到组件的代码中,不用担忧在不一样模块中具备相同类名可能形成的问题
            }
        ]

    },

    devServer:{
        contentBase: "./public",
        colors: true,
        historyApiFallback: true,
        inline: true
    },

    plugins:[
        new webpack.LoaderOptionsPlugin({
            options:{
                 postcss: [
                    require('autoprefixer')//调用autoprefixer插件
                  ],
            }
        })
    ]

}

三 uglify插件

提示uglifyJsPlugin is not a constructor
clipboard.pngpost

其实只要注意大小写便可。uglify的u要大写。
正确写法:ui

new webpack.optimize.UglifyJsPlugin(),
相关文章
相关标签/搜索