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

一、插件篇

1. 自动补全css3前缀

autoprefixer

官方是这样说的:Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website
,也就是说它是一个自动检测兼容性给各个浏览器加个内核前缀的插件。

举个栗子:最新的弹性盒模型flux
实际代码:

:fullscreen a {display: flex
}

插件自动补充后

a {display: -webkit-box;display: -webkit-flex;display: -ms-flexbox;display: flex
}

效果显而易见,我们可以更专注于css布局和美化,而不需要花过多的精力都写相同的外码而加上不同的前缀,也减少了冗余代码。

使用方法:

cnpm install --save-dev autoprefixer postcss-loader

var autoprefixer = require('autoprefixer');
module.exports={//其他配置这里就不写了module:{loaders:[{test:/\.css$/,//在原有基础上加上一个postcss的loader就可以了loaders:['style-loader','css-loader','postcss-loader']}]},postcss:[autoprefixer({browsers:['last 2 versions']})]}

2. 自动生成html插件

html-webpack-plugin

cnpm install html-webpack-plugin --save-dev

  //webpack.config.jsvar HtmlWebpackPlugin = require('html-webpack-plugin');module.exports={entry:'./index.js',output:{path:__dirname+'/dist',filename:'bundle.js'}plugins:[new HtmlWebpackPlugin()]}

作用:它会在dist目录下自动生成一个index.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Webpack App</title></head><body><script src="bundle.js"></script></body>
</html>

其他配置参数:

{entry: 'index.js',output: {path: 'dist',filename: 'bundle.js'},plugins: [new HtmlWebpackPlugin({title: 'My App',filename: 'admin.html',template:'header.html',inject: 'body',favicon:'./images/favico.ico',minify:true,hash:true,cache:false,showErrors:false,"chunks": {"head": {"entry": "assets/head_bundle.js","css": [ "main.css" ]},xhtml:false})]
}
--- header.html ---
<!DOCTYPE html>
<html><head><meta http-equiv="Content-type" content="text/html; charset=utf-8"/><title><%= htmlWebpackPlugin.options.title %></title></head><body></body>
</html>

作用:

  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-pluginnew CopyWebpackPlugin([{from: __dirname + '/src/public'
}]),

作用:把public 里面的内容全部拷贝到编译目录

参数 作用 其他说明
from 定义要拷贝的源目录 from: __dirname + '/src/public'
to 定义要烤盘膛的目标目录 from: __dirname + '/dist'
toType file 或者 dir 可选,默认是文件
force 强制覆盖先前的插件 可选 默认false
context 不知道作用 可选 默认 base context 可用 specific context
flatten 只拷贝文件不管文件夹 默认是false
ignore 忽略拷贝指定的文件 可以用模糊匹配

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 directorypath: __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进阶之插件篇相关推荐

  1. vue+webpack 安装常见插件

    html-webpack-plugin 插件地址:https://www.npmjs.com/package... 安装指令: npm install html-webpack-plugin --sa ...

  2. JavaScript 进阶知识 - Ajax篇

    Ajax 前言 前面我们已经学习了js基础知识和一些简单的特效,基本上已经能够写出一个带有特效的静态页面了,为什么还要称之为静态页面呢?因为网页里的数据都是写死的,真正的工作中,我们是要通过Ajax技 ...

  3. webpack项目css插件压缩等步骤

    webpack项目css插件压缩等步骤 minicssextractplugin css插件防止闪屏 首先安装npm i mini-css-extract-plugin -S 要求webpack5 这 ...

  4. webpack大全---------(基础配置篇)----4.webpack实例三

    上一篇:webpack大全---------(基础配置篇)----2.webpack实例二 webpack实例三:讲述代码效验模块eslint.引入第三方模块的处理.图片的打包处理. 第一步:安装配置 ...

  5. 定制Eclipse IDE之插件篇(一)

    本文转自 海角在眼前 博客园博客,原文链接: http://www.cnblogs.com/lovesong/p/4694688.html  ,如需转载请自行联系原作者 上文回顾:定制Eclipse ...

  6. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果需要借助于NGUI提供的TweenPosition类来完成,为了说明此类的使用方法,本节将使会讲解两个示例.本文选自  大学霸 <NGU ...

  7. VSCode打造成为开发神器-插件篇

    VSCode打造成为开发神器-插件篇 1. 编程语言类 下面的几个插件根据情况安装. C/C++ Dart dart-import Go Go Doc ** Python** 2. 代码风格类 Bea ...

  8. SQL Server索引进阶第六篇:书签

    SQL Server索引进阶第六篇:书签 索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员 ...

  9. SQL Server索引进阶第十篇:索引的内部结构

    索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...

最新文章

  1. 一文吃透JAVA定时器格式
  2. web service
  3. 嵌入式开发之zynq——zynq开发环境搭建
  4. 目的地返回POJ 2336 动态规划(DP) Ferry Loading II
  5. 阿里java高级工程师面试100题(建议收藏)
  6. python的使用说明_Python 的基本使用说明
  7. Ubuntu扩展触摸屏触控错位修复
  8. 2091: [Poi2010]The Minima Game
  9. QQ群一键加群代码调用官方API
  10. 笔试编程题常用的一些技巧方法
  11. 计算机专业改动漫设计,《计算机动漫与游戏制作》专业课程体系改革方案.doc...
  12. Beini奶瓶U盘PE完整教程[2018-11-28]
  13. python 生成有效的四要素
  14. 网页打开速度慢的原因及N种解决方法
  15. ucoreOS-lab0
  16. 浅议抖音短视频平台的利与弊
  17. 小批量、多品种生产模式如何快速响应客户交期
  18. <C语言>扫...土豆雷游戏?!
  19. 学生老师的家教服务平台小程序制作
  20. 固定电话+手机号码 正则表达式

热门文章

  1. vue 断开正在发送的请求_vue 发送请求频繁时取消上一次请求
  2. Python 图片转简单字符画
  3. 使用Linux auto Makefile自动生成的运行步骤
  4. 算法(13)-leetcode-explore-learn-数据结构-链表小结
  5. 如何在三个月内获得三年的工作经验
  6. 《小狗钱钱》:理财首先应该有一种强烈的意识
  7. python基本语法:序列
  8. dojo 九 effects dojo/_base/fx 和 dojo/fx
  9. 发布在线文档【软件=业务+架构+流程+组织.pptx】
  10. zabbix-02-CentOS7.4安装zabbix4.0