webpack进阶之插件篇

上一篇博客讲解了webpack环境的基本,这一篇讲解一些更深入的内容和开发技巧。基本环境搭建就不展开讲了

超级产品经理

作用:

title: 设置title的名字
filename: 设置这个html的文件名
template:要使用的模块的路径
inject: 把模板注入到哪个标签后 'body',
favicon: 给html添加一个favicon './images/favico.ico',
minify:是否压缩 {...} | false (最新api变动,原来是ture|false 感谢@onmi指正)
hash:是否hash化 true false ,
cache:是否缓存,
showErrors:是否显示错误,
chunks:目前没太明白
xhtml:是否自动毕业标签 默认false

### 3. 提取样式插件extract-text-webpack-plugin官网是这么解释的Extract text from bundle into a file.,把额外的数据加到编译好的文件中

var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
module: {
loaders: [
{ test: /.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/public/index.html',
inject: 'body'
}),
new ExtractTextPlugin("[name].[hash].css")
]
}

说明:将css放到index.html的body上面### 4. 拷贝资源插件copy-webpack-plugin官方这样解释 Copy files and directories in webpack,在webpack中拷贝文件和文件夹

cnpm install --save-dev copy-webpack-plugin

new CopyWebpackPlugin([{
from: __dirname + '/src/public'
}]),

作用:把public 里面的内容全部拷贝到编译目录参数作用其他说明from定义要拷贝的源目录from: __dirname + '/src/public'to定义要烤盘膛的目标目录from: __dirname + '/dist'toTypefile 或者 dir可选,默认是文件force强制覆盖先前的插件可选 默认falsecontext不知道作用可选 默认 base context 可用  specific contextflatten只拷贝文件不管文件夹默认是falseignore忽略拷贝指定的文件可以用模糊匹配### 5. 全局挂载插件webpack.ProvidePlugin [webpack内置插件 ]

new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery"
}))
new webpack.NoErrorsPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.CommonsChunkPlugin('common.js')

作用: 和上面5个一一对应

当模块使用这些变量的时候,wepback会自动加载。(区别于window挂载,感谢@lihuanghe121指正)
不显示错误插件
查找相等或近似的模块,避免在最终生成的文件中出现重复的模块
丑化js 混淆代码而用
提取公共代码的插件

## 二、一个完整的栗子

'use strict';

// Modules
var webpack = require('webpack');
var autoprefixer = require('autoprefixer');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');

/

  • Env
  • Get npm lifecycle event to identify the environment
    */
    var ENV = process.env.npm_lifecycle_event;
    var isTest = ENV === 'test' || ENV === 'test-watch';
    var isProd = ENV === 'build';

module.exports = function makeWebpackConfig() {
var config = {};

config.entry = isTest ? {} : {    app: './src/app/app.js'};config.output = isTest ? {} : {    // Absolute output directory    path: __dirname + '/dist',    publicPath: isProd ? '/' : 'http://localhost:8080/',    filename: isProd ? '[name].[hash].js' : '[name].bundle.js',    chunkFilename: isProd ? '[name].[hash].js' : '[name].bundle.js'};if (isTest) {    config.devtool = 'inline-source-map';} else if (isProd) {    config.devtool = 'source-map';} else {    config.devtool = 'eval-source-map';}config.module = {    preLoaders: [],    loaders: [{        test: /\.js$/,        loader: 'babel',        exclude: /node_modules/    }, {        test: /\.css/,        loader: isTest ? 'null' : ExtractTextPlugin.extract('style', 'css?sourceMap!postcss')    }, {        test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,        loader: 'file'    }, {        test: /\.json$/,        loader: 'json'    }, {        test: /\.scss/,        loader: 'style!css!sass'    }, {        test: /\.html$/,        loader: 'raw'    }]};if (isTest) {    config.module.preLoaders.push({        test: /\.js$/,        exclude: [            /node_modules/,            /\.spec\.js$/        ],        loader: 'isparta-instrumenter'    })}config.postcss = [    autoprefixer({        browsers: ['last 2 version']    })];config.plugins = [];if (!isTest) {    config.plugins.push(        new HtmlWebpackPlugin({            template: './src/public/index.html',            inject: 'body'        }),        new ExtractTextPlugin('[name].[hash].css', {disable: !isProd})    )}if (isProd) {    config.plugins.push(        new webpack.NoErrorsPlugin(),        new webpack.optimize.DedupePlugin(),        new webpack.optimize.UglifyJsPlugin(),        new CopyWebpackPlugin([{            from: __dirname + '/src/public'        }]),        new webpack.ProvidePlugin({            $: "jquery",            jQuery: "jquery",            "window.jQuery": "jquery"        }))}config.devServer = {    contentBase: './src/public',    stats: 'minimal'};return config;

}();

## 三、调试技巧

if (isTest) {
config.devtool = 'inline-source-map';
}

作用: 使用source-map可以在debug的时候看到源代码,方便 查错#webpack、JavaScript、node.js、loader#


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部