gloria0 2019-06-21
之前在简书上看到一个webpack入门(入门Webpack,看这篇就够了),讲得确实很清楚,但是因为博主用的是1.x的版本,和现在普遍默认安装的2.x版本有一些细节上的差距,所以实际使用的时候就会遇到一些坑,对于想入门的小白如我,造成了不小的困扰。于是,干脆整理了一下我遇到的各种报错,以备所需。
webpack 2.0之后,不能省略后缀-loader
最开始直接把postcss写在module.exports的配置里,报错
//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里面。报错信息如图
于是将postcss部分更改为
plugins:[ new webpack.LoaderOptionsPlugin({ options:{ postcss: [ require('autoprefixer')//调用autoprefixer插件 ], } }) ]
这时问题又来了,报错,提示语法错误,webpack没有被定义
要解决这个问题,需要在整个webpack.config.js配置文件头部定义webpack
var webpack = require('webpack');
最终的配置文件如下,此时可以正常运行webpack,看到css中被自动根据浏览器添加了前缀,autoprefixer调用成功
//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插件 ], } }) ] }
提示uglifyJsPlugin is not a constructor
其实只要注意大小写即可。uglify的u要大写。
正确写法:
new webpack.optimize.UglifyJsPlugin(),