实例gif图:

目录截图:

目录介绍:

dist目录(最后生成的目录,里面文件为配置webpack自动生成的):

c/:css文件夹;

i/:img文件夹;

j/:js文件夹;

src目录下(开发目录):

c/:css文件夹;

l/:less文件夹;

s/:sass文件夹;

i/:img文件夹;

j/:js文件夹;

教程开始

原始文件夹:

第一步 
在CMD生成默认package.json文件:

 npm init -y

栗子截图:

第二步

在CMD安装插件:

npm install   autoprefixer
babel-core babel-loader
babel-preset-es2015
css-loader
cssnano
extract-text-webpack-plugin
file-loader
html-webpack-plugin
img-loader
less
less-loader
node-sass
optimize-css-assets-webpack-plugin
postcss-loader
sass-loader
url-loader
webpack
webpack-dev-server --save-dev

栗子截图:(别一口气把插件全写上跑。。。。)

最终 package.json 文件:

 {
"name": "webpack-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack --config webpack.config.js --display-modules --progress -w -d --colors ",
"dev": " webpack-dev-server --progress --inline --hot --colors"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^6.7.4",
"babel-core": "^6.23.1",
"babel-loader": "^6.3.2",
"babel-preset-es2015": "^6.22.0",
"css-loader": "^0.26.1",
"cssnano": "^3.10.0",
"extract-text-webpack-plugin": "^2.0.0-rc.3",
"file-loader": "^0.10.0",
"html-webpack-plugin": "^2.28.0",
"img-loader": "^1.3.1",
"less": "^2.7.2",
"less-loader": "^2.2.3",
"node-sass": "^4.5.0",
"optimize-css-assets-webpack-plugin": "^1.3.0",
"postcss-loader": "^1.3.1",
"sass-loader": "^6.0.1",
"url-loader": "^0.5.7",
"webpack": "^2.2.1",
"webpack-dev-server": "^2.4.1"
}
}

第三步

在根目录建webpack.config.js 文件并编写:

 'use strict';

 const webpack = require('webpack');  //webpack模块;
const path = require('path'); //node 路径模块;
const ExtractTextPlugin = require("extract-text-webpack-plugin"); //独立打包css模块;
const HtmlWebpackPlugin = require('html-webpack-plugin'); //html模板模块;
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); //压缩CSS模块; module.exports = {
context: path.resolve(__dirname, './src/j'), //设置原始文件目录;
entry: { //打包入口;
app: './index.js', //打包js;
},
output: { //打包出口;
publicPath: "http://localhost:8080/", //配合devServer本地Server;
path: path.resolve(__dirname, './dist/'), //出口地址;
filename: 'j/[name].bundle.js', //出口文件名;
},
module: { //模块;
rules: [ //原 webpack@1 里 loaders;
{
//正则匹配后缀.js文件;
test: /\.js$/,
//需要排除的目录
exclude: '/node_modules/',
//加载babel-loader转译es6
use: [{
loader: 'babel-loader',
//配置参数;
options: { presets: ['es2015',] }
}],
},
{
//正则匹配后缀.css文件;
test: /\.css$/,
//使用html-webpack-plugin插件独立css到一个文件;
use: ExtractTextPlugin.extract({
//加载css-loader、postcss-loader(编译顺序从下往上)转译css
use: [
{
loader : 'css-loader?importLoaders=1', },
{
loader : 'postcss-loader',
//配置参数;
options: {
//从postcss插件autoprefixer 添加css3前缀;
plugins: function() {
return [
//加载autoprefixer并配置前缀,可加载更多postcss插件;
require('autoprefixer')({
browsers: ['ios >= 7.0']
})
];
}
}
}
]
})
},
{
//正则匹配后缀.sass、.scss文件;
test: /\.(sass|scss)$/,
//使用html-webpack-plugin插件独立css到一个文件;
use: ExtractTextPlugin.extract({
use: [
{
loader : 'css-loader?importLoaders=1',
},
{
loader : 'postcss-loader',
//配置参数;
options: {
plugins: function() {
return [
require('autoprefixer')({
browsers: ['ios >= 7.0']
})
];
}
}
},
{
//加载sass-loader同时也得安装node-sass;
loader: "sass-loader",
//配置参数;
options: {
//sass的sourceMap
sourceMap:true,
//输出css的格式两个常用选项:compact({}行), compressed(压缩一行)
outputStyle : 'compact'
}
}
]
})
},
{
//正则匹配后缀.less文件;
test: /\.less$/,
//使用html-webpack-plugin插件独立css到一个文件;
use: ExtractTextPlugin.extract({
use: [
{
loader : 'css-loader?importLoaders=1',
},
{
loader : 'postcss-loader',
//配置参数;
options: {
plugins: function() {
return [
require('autoprefixer')({
browsers: ['ios >= 7.0']
})
];
}
}
},
//加载less-loader同时也得安装less;
"less-loader"
]
})
},
{
//正则匹配后缀.png、.jpg、.gif图片文件;
test: /\.(png|jpg|gif)$/i,
use: [
{
//加载url-loader 同时安装 file-loader;
loader : 'url-loader',
options : {
//小于10000K的图片文件转base64到css里,当然css文件体积更大;
limit : 10000,
//设置最终img路径;
name : '/i/[name]-[hash].[ext]'
}
},
{
//压缩图片(另一个压缩图片:image-webpack-loader);
loader : 'img-loader?minimize&optimizationLevel=5&progressive=true'
}, ]
}
]
},
plugins: [ //插件;
//模板插件
new HtmlWebpackPlugin({
filename: 'index.html', //设置最后生成文件名称;
template: __dirname+'/src/index.html' //设置原文件;
}),
//独立打包css插件;
new ExtractTextPlugin({
filename : 'c/styles.css' //设置最后css路径、名称;
}),
//压缩css(注:因为没有用style-loader打包到js里所以webpack.optimize.UglifyJsPlugin的压缩本身对独立css不管用);
new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g, //正则匹配后缀.css文件;
cssProcessor: require('cssnano'), //加载‘cssnano’css优化插件;
cssProcessorOptions: { discardComments: {removeAll: true } }, //插件设置,删除所有注释;
canPrint: true //设置是否可以向控制台打日志,默认为true;
}),
//webpack内置js压缩插件;
new webpack.optimize.UglifyJsPlugin({
compress: { //压缩;
warnings: false //关闭警告;
}
}),
//webpack内置自动加载插件配合resolve.alias做全局插件;
new webpack.ProvidePlugin({
$: 'jquery' //文件里遇见‘$’加载jquery;
})
],
devServer: { //设置本地Server;
contentBase: path.join(__dirname,'dist'), //设置启动文件目录;
port: 8080, //设置端口号;
compress: true, //设置gzip压缩;
//inline:true, //开启更新客户端入口(可在package.json scripts 里设置 npm run xxx);
//hot: true //设置热更新(可在package.json scripts 里设置 npm run xxx);
},
resolve:{
//设置可省略文件后缀名(注:如果有文件没有后缀设置‘’会在编译时会报错,必须改成' '中间加个空格。ps:虽然看起来很强大但有时候省略后缀真不知道加载是啥啊~);
extensions: [' ','.css','.scss','.sass','.less','.js','.json'],
//查找module的话从这里开始查找;
modules: [path.resolve(__dirname, "src"), "node_modules"], //绝对路径;
//别名设置,主要是为了配和webpack.ProvidePlugin设置全局插件;
alias: {
//设置全局jquery插件;
jquery: path.resolve(__dirname,'./src/j/jquery.min.js') //绝对路径;
}
}
};

第四步

在index.js 入口js文件 引入需要打包文件(真实项目里也不太可能less\sass\css 三个混着写,示例而已):

第五步

webpack 常用命令

 webpack 最基本的启动webpack命令
webpack -w 提供watch方法,实时进行打包更新
webpack -p 对打包后的文件进行压缩
webpack -d 提供SourceMaps,方便调试
webpack --colors 输出结果带彩色,比如:会用红色显示耗时较长的步骤
webpack --profile 输出性能数据,可以看到每一步的耗时
webpack --display-modules 默认情况下 node_modules 下的模块会被隐藏,加上这个参数可以显示这些被隐藏的模块
webpack --progress 显示编译进度
webpack-dev-server --inline 开启更新客户端入口
webpack-dev-server --hot 开启热更新

老写那么长的命令四不四撒 所以在package.json 编写 npm scripts 集成命令:

 "webpack": "webpack --config webpack.config.js --display-modules --progress -w -d --colors ",
"dev": " webpack-dev-server --progress --inline --hot --colors"

栗子截图:

第六步

CMD跑 npm run webpack 完成之后在 跑 npm run dev 启动服务:

 npm run webpack
npm run dev

栗子截图:

最后就可以打开 http://localhost:8080/ 实时更新了啦!

后记:

其实这里面有个问题我没有解决就是实时更新独立的CSS文件

因为我没有style-loader 把CSS打包到js里而是独立出一个CSS文件(不要问我为什么不用,因为不喜欢)

所以我在改src/里的css文件时 虽然webpack是检测有文件更改 但因为更改css不在js里

它就没新刷浏览器,独立的css也无法热更新,在网上找了好多文章也没看到类似的问题~

参考资料:

webpackhttp://webpack.github.io/

webpack中文指南http://webpackdoc.com/

愚人码头 : http://www.css88.com/archives/6992

qbatyhttp://www.imooc.com/learn/802

webpack2 实践的更多相关文章

  1. 使用webpack2.0 搭建react.js项目

    最近一段时间没有写react.js,发现webpack已经完全升级为2.0了,升级后导致以前的项目不能正常编译,只能重新实践一番 关于webpack2.0和1.x的区别概括起来就是tree shaki ...

  2. Web 前端从入门菜鸟到实践老司机所需要的资料与指南合集

    http://web.jobbole.com/89188/ 2016 – 对于未来五年内Web发展的7个预测 2015 – 我的前端之路:从命令式到响应式,以及组件化与工程化的变革 怎么成为一名优秀的 ...

  3. webpack 从入门到工程实践

    from:https://www.jianshu.com/p/9349c30a6b3e?utm_campaign=maleskine&utm_content=note&utm_medi ...

  4. webpack实践总结

    一.Loader写法及执行顺序 从webpack2起,loader的格式如下: module: { rules: [ {test: /\.css$/, use: ['style-loader','cs ...

  5. 一份关于webpack2和模块打包的新手指南(二)

    插件 我们已经看到一个内置的webpack插件的例子,在npm run build脚本中调用的webpack -p命令就是使用webpack附带的UglifyJsPlugin插件以生产模式压缩打包文件 ...

  6. Tree-Shaking性能优化实践 - 原理篇

    Tree-Shaking性能优化实践 - 原理篇   一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前 ...

  7. webpack2诸类事宜

    写在最前:webpack的总结也是自己坑过,实践过但是也是针对性的使用,在加上webpack的背景,对于其‘原理’方面有很大的不正确的理解,有错误的地方,请尽情指出(乖巧~) 由于版本遇到的问题: 在 ...

  8. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  9. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

随机推荐

  1. git 版本回滚

    1.克隆代码到本地 git clone http://qtools@dev.qtoolsbaby.cn:81/gitlab/qtools/jenkins_ceshi.git 2.git log 查看所 ...

  2. CentOS 安装 Ansible 以及连接Windows server的办法

    1. CentOS机器上面按住那ansible yum install ansible 2. 安装 pywinrm  如果不安装 这个的话  ansible 会提示 没有 winrm 模块 注意需要先 ...

  3. golang面向对象和interface接口

    一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...

  4. Jenkins+Git+Maven搭建自动化构建平台

    http://blog.csdn.net/xlgen157387/article/details/50353317

  5. 一道php笔试题

    原文地址: http://www.walu.cc/php/a-bishiti.md 问题: 请找出下面代码中的问题,修复并优化. <?php //批量注册用户,每次>100个. //注册新 ...

  6. [pip]upgrade outdated pip package on windows / 在windows上更新所有过时的pip包

    首先更新pip自身: python -m pip install -U pip 查询过期包: pip list --outdated --format=columns Package Version ...

  7. django rest framework renderer

    渲染器 REST framework 包含许多内置的渲染器类,允许您使用各种 media type 返回响应.同时也支持自定义渲染器. 视图的渲染器集合始终被定义为类列表.当调用视图时,REST fr ...

  8. BZOJ 1010: 玩具装箱toy (斜率优化dp)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  9. Floyed-Warshall【弗洛伊德算法】

    首先介绍一下有关最短路径的知识 从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径.解决最短路的问题有以下算法,Dijkstra算法,Bellman-Ford算 ...

  10. Exp3 免杀原理与实践

    一.实验过程 1.编码器 (1)使用msf编码器,直接生成meterpreter可执行文件(跟Exp2中生成backdoor.exe的过程一样,生成后门文件),送到Virscan.VirusTotal ...