可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This WARNING is printed ~20 times when running webpack - it processes and bundles just fine, but what does it mean? How do I get rid of it?
Googling around provides little to no help unfortunately.
Here's my webpack config:
const ExtractTextPlugin = require("extract-text-webpack-plugin"); var webpack = require("webpack"); module.exports = { entry: { dashboard: './js/main.js', vendor: ["fixed-data-table","react","react-dom","jquery", "bootstrap", "vis",], }, output: { path: "../public", filename: 'bundle.js' }, plugins: [ new webpack.optimize.CommonsChunkPlugin({name: "vendor", filename: "static/vendor.bundle.js"}), new ExtractTextPlugin("/static/[name].css"), new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" }), ], module: { loaders: [ { test: /.js?$/, loader: 'babel-loader', exclude: /node_modules/, query: { presets: [ 'es2015', 'react', 'stage-0', ], } }, { test: /\.css$/, loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader'}), }, { test: /\.(jpe?g|png|gif|svg)$/i, loaders: [ 'file-loader?hash=sha512&digest=hex&name=~/.local/share/Trash/[hash].[ext]', 'image-webpack-loader?bypassOnDebug&optimizationLevel=7&interlaced=false', { loader: 'image-webpack-loader', } ], }, { test: /\.(eot|svg|ttf|woff|woff2)$/, loader: 'file-loader?name=~/.local/share/Trash/[name].[ext]' } ] }, };
Sample of WARNINGS(there are many!)
WARNING in ./~/vis/dist/img/network/addNodeIcon.png DEPRECATED. Configure gifsicle's interlaced option in it's own options. (gifsicle.interlaced) @ ./~/css-loader!./~/vis/dist/vis.min.css 6:12847-12887 @ ./~/vis/dist/vis.min.css WARNING in ./~/bootstrap/dist/fonts/glyphicons-halflings-regular.svg DEPRECATED. Configure gifsicle's interlaced option in it's own options. (gifsicle.interlaced) @ ./~/css-loader!./~/bootstrap/dist/css/bootstrap.min.css 6:3700-3752 @ ./~/bootstrap/dist/css/bootstrap.min.css
回答1:
You now need to specify your options to the specific optimizer. so a previous webpack 1.x loader config like;
loaders: [ 'file-loader?name=assets/[name].[ext]', 'image-webpack-loader?progressive=true&optimizationLevel=7&interlaced=true' ]
becomes
use: [ { loader: 'file-loader', options: { query: { name:'assets/[name].[ext]' } } }, { loader: 'image-webpack-loader', options: { query: { mozjpeg: { progressive: true, }, gifsicle: { interlaced: true, }, optipng: { optimizationLevel: 7, } } } }]
Note the options object, with the query embedded inside it.
See https://webpack.js.org/guides/migrating/ and deltones comments in this issue; https://github.com/tcoopman/image-webpack-loader/issues/68#issuecomment-275848595
回答2:
None of the above was working for me, taking inspiration from the official webpack2 configuration example https://github.com/tcoopman/image-webpack-loader/blob/master/test/webpack2.config.js this is what worked for me
{ test: /\.(png|jpe?g|gif|svg)$/, use: [ { loader: 'file-loader', options: { // path where the images will be saved name: 'assets/img/[name].[ext]' } }, { loader: 'image-webpack-loader', options: { mozjpeg: { quality: 65 }, pngquant:{ quality: "10-20", speed: 4 }, svgo:{ plugins: [ { removeViewBox: false }, { removeEmptyAttrs: false } ] }, gifsicle: { optimizationLevel: 7, interlaced: false }, optipng: { optimizationLevel: 7, interlaced: false } } } ] }
回答3:
Webpack 2 now supports "query object" syntax, meaning you can make a separete object for the query parameters. Here is how the image-webpack-loader recommends it in their documentation. I updated it with the newest webpack 2 naming standards:
rules: [ // rules is formerly "loaders" in webpack 1 { test: /\.(svg|jpe?g|png|gif|ico)(\?{0}(?=\?|$))/, use: [ // use is formerly "loaders" in webpack 1 // file-loader has a bug where it doesn't yet recognize query object // syntax for webpack 2, so the query options `assets/images/[name].[ext]` // are ignored until they fix that, // { // loader: 'file', // query: { // name: 'assets/images/[name].[ext]' // } //}, 'file?name=assets/images/[name].[ext]', // or just 'file-loader' { loader: 'image-webpack', query: { progressive: true, optimizationLevel: 7, interlaced: false, pngquant: { quality: '65-90', speed: 4 } } // you can also do it like this: // query: { // mozjpeg: { // progressive: true, // }, // gifsicle: { // interlaced: false, // }, // optipng: { // optimizationLevel: 7, // } // } } ] } ]
Note that rules is the same as webpack 1 top level loaders, and use is the same as webpack 1 loaders at the individual loader level (the one after test). As you can see, it was confusing before, which is why the schema has been renamed in webpack 2.
回答4:
This is caused by having params in the query object that now belong in one of the child objects.
for example:
This is bad:
'file-loader', { loader: 'image-webpack-loader', query: { progressive: true, optimizationLevel: 7, pngquant: { quality: '65-90', speed: 4 }, mozjpeg: { progressive: true }, gifsicle: { interlaced: true }, optipng: { optimizationLevel: 7 } } }
where this is good:
'file-loader', { loader: 'image-webpack-loader', query: { pngquant: { quality: '65-90', speed: 4 }, mozjpeg: { progressive: true }, gifsicle: { interlaced: true }, optipng: { optimizationLevel: 7 } } }
回答5:
The following webpack2 config of image-webpack-loader works fine for me:
{ loader: 'image-webpack-loader', options: { progressive: true, optipng: { optimizationLevel: 7, }, mozjpeg: { quality: 65 }, gifsicle: { interlaced: true, }, pngquant: { quality: '65-90', speed: 4 } } }