webpack 入门
webpack
webpack,是一款模块加载器兼打包工具.能将 JS、coffee、less、sass、图片等作为模块来使用.
经过一个多月的摸索,姑且算是入门了.因此重新写个小DEMO来加深自己对 webpack 的理解.
安装webpack
$ npm install webpack -g
跟gulp一样.webpack也有一个默认的配置文件,名为 webpack.config.js
该配置文件里,可以以 commonJS 的方式去写
module.exports = {
entry: {
// 入口文件
index: './index.js'
},
output: {
path: 'dist',
// 编译后的入口文件
filename: 'index.js'
}
}
这样即可在 index.js 里进行编码,js里可以采用 commonJS模块化进行开发.
在webpack里 使用ES6
首先应当先下载好 ES6的依赖包
$ npm install --save-dev babel-preset-es2015
$ npm install --save-dev babel-core
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-loader
在目录里新建.babelrc
所有的babel模块或工具都需要先写好
.babelrc
{
"presets": [
"es2015",
"stage-2"
]
}
webpack.config.js里添加以下代码
module: {
// 加载器配置
loaders: [
{test: /\.js$/, loaders: ['babel'], exclude: /node_modules/},
{test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'},
]
}
module.loaders 是告诉
webpack每一种文件需要使用什么加载器,多个加载器可以通过 ! 来连接-loader可省略不写
运行 webpack
$ webpack --config xxx.js // 使用该配置文件进行打包
$ webpack --watch //监听文件并自动打包
$ webpack -p //压缩打包文件
$ webpack -d //生成map文件
loader 介绍
style-loader
将 style 添加到页面中
css-loader
对CSS 进行打包
{test: /\.css$/, loader: 'style!css'}
sass-loader
对 scss文件进行编译以及打包
{test: /\.scss$/, loader: 'style!css!sass'}
url-loader
对图片进行处理,符合条件的直接转为 base64
{test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}
!!!当 webpack 第一次使用以上 loader 时,将会给出报错以及提示缺少哪些module,到时候直接对着错误信息进行安装对应的模块即可
独立打包样式
有的时候 我们不希望将 css 代码写到 js里,而是另外独立写个.css文件,这个时候我们需要 extract-text-webpack-plugin
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var extractSCSS = new ExtractTextPlugin('style.css');
module.exports = {
...
module: {
loaders: [
{test: /\.scss$/, loader: extractSCSS.extract(['css','sass'])},
]
}
plugins: [extractSCSS]
}
多入口文件提取公共模块
当入口文件有多个的时候,就需要提取出公共文件了.可采用 CommonsChunkPlugin 来提取
var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
entry: {
index: './index.js',
detail: './detail.js',
user: './user.js'
},
output: {
path: 'dist',
filename: '[name].js'
},
module: {
...
},
plugins: [
// 三个入口文件公用 common.js
new CommonsChunkPlugin('common.js'),
// index,detail 公用 common.js
// user 公用 admincommon.js
new CommonsChunkPlugin('common.js', ['index', 'detail']),
new CommonsChunkPlugin('admincommon.js', ['user'])
]
}
利用缓存以及自动生成页面
module.exports = {
...
output: {
filename: '[name].[chunkhash:8].js'
},
...
}
hash:8chunkhash:8可以为文件 添加 长度8位的哈希值
由于js和css文件名的变化,导致html文件里引用的将会失效,可使用HtmlWebpackPlugin来进行自动修改
var HtmlWebpackPlugin = require('html-webpack-plugin');
var extractCSS = new ExtractTextPlugin('style.[chunkhash:8].css');
module.exports = {
...
plugins: [
extractCSS,
new CommonsChunkPlugin('common.[hash:8].js'),
new HtmlWebpackPlugin({
title: 'My App',
// 文件名称
filename: 'index.html',
// 模版位置
template: 'index.html',
// chunks 里写入口文件 common为提取出来的文件 所以得加上哈希值 才能正确插入到html里
chunks: ['common.[hash:8].js', 'index'],
})
],
...
}
异步加载
我们的webpack里面全靠同步加载JS,有的时候可能会使JS文件加载后很大,从而导致移动端首屏白屏很久.这是不好的体验.
因此我们可采用多个 chunk (代码块),在需要的时候或者异步加载内容
require.ensure([], function(){
// 加载的JS文件
require('./xxxxx');
});
webpack-dev-server
这是个基于 Express.js 框架开发的 web server. 默认端口 8080;内部调用了 webpack, 监控到文件的变化并实时刷新页面.使得开发变得更加容易.
$ npm install webpack-dev-server --save-dev // 安装
$ webpack-dev-server --inline --hot
--inline能为页面添加"热加载"功能,如果代码发生变化,webpack将会自动编译并且刷新页面.使得我们能马上获得最新的页面状态
--hot"热替换(Hot Module Reloading)",即HRM.当资源发生变化时,webpack会优先进行 热替换,而不是刷新整个页面.只有当HRM失效后才会进行"热加载"
module.exports = {
entry: {
...
server: {
'webpack-dev-server/client?http://0.0.0.0:8080',
'webpack/hot/only-dev-server'
}
}
}
输入
$ webpack-dev-server --inline
$ webpack-dev-server --inline --hot
浏览器打开 localhost:8080 即可查看效果
webpack 入门的更多相关文章
- webpack入门教程之Hello webpack(一)
webpack入门教程系列为官网Tutorials的个人译文,旨在给予想要学习webpack的小伙伴一个另外的途径.如有不当之处,请大家指出. 看完入门教程系列后,你将会学习到如下内容: 1.如何安装 ...
- webpack入门——webpack的安装与使用
一.简介 1.什么是webpack webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. ...
- 一小时包教会 —— webpack 入门指南
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- Webpack 入门指南 - 3. Hello, Angular2!
Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...
- Webpack 入门指南 - 2.模块
这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...
- Webpack 入门指南 - 1.安装
Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统 ...
- webpack入门和实战(一):webpack配置及技巧
一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...
- webpack入门--前端必备
webpack入门--前端必备 什么是 webpack? webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来 ...
- webpack入门笔记
此为第一篇主要是webpack入门笔记: http://if-true.com/2015/10/16/webpack-tutorial-translate.html
- webpack入门必知必会
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推 ...
随机推荐
- Kylin(三): Saiku
Saiku是一个轻量级的OLAP分析引擎,可以方便的扩展.嵌入和配置.Saiku通过REST API连接OLAP系统,利用其友好的界面为用户提供直观的分析数据的方式,它是基于jQuery做的前端界面. ...
- Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ...
- CentOS 6主机上的RStudio Server安装步骤
1. 安装EPEL库 yum -y install epel-release 2. 安装R yum install R 3. 安装OpenSSL yum install openssl098e 4. ...
- Android数据库的运用
很简单的应用,所以我直接简单明了. android中数据库的运用: 1.定义类继承SQLiteOpenHelper ps: public class DBHelper exten ...
- IOS零碎技术整理(3)-获取wifi列表
1. 该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...
- bzoj4750: 密码安全
Description 有些人在社交网络中使用过许多的密码,我们通过将各种形式的信息转化为 01 信号,再转化为整数,可以将这个 人在一段时间内使用过的密码视为一个长度为 n 的非负整数序列 A_1, ...
- Mysql 客户端查询结果如何保存到本地而不是服务端?
应用场景:知道某台DB服务器的IP和账户,登录上去查询了10W条记录,需要把这些记录拉到本地做分析 方法1,远程连接到DB服务器执行OUTFILE命令,文件存储在DB机器上,只有mysql账户的情况下 ...
- 一款好用且免费的语句分析工具Plan Explorer
在调优过程中的查询语句优化阶段,分析语句的执行计划是必经之路,一款好的执行计划分析工具确实可以帮助我们事半功倍 小贴士:Plan Explorer是将Plan Explorer 专业版与免费版整合在一 ...
- Hyperreal number
Hyperreal number https://en.wikipedia.org/wiki/Hyperreal_number
- mysql临时表的产生
sql执行会生成一个巨大的临时表,当内存放不下时,要全部copy 到磁盘,导致IO飙升,时间开销增大. 额外收获知识收藏如下: 临时表存储 MySQL临时表分为"内存临时表"和&q ...