Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 CMD 模块、ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。
npm install webpack -g
webpack main.js build.js
会把基于模块开发的main.js引用的外部模块合并到build.js中。
页面上直接引用build.js
webpack.config.js webpack默认的配置文件
将来在命令行运行webpack就会自动执行配置文件中的内容
//
module.exports = {
entry: './main.js', //入口的js文件
output: {
path: './bin', //打包输出的目录
filename: 'build.js' //文件名
}
};
webpack默认只能打包js文件
cnpm init
cnpm install css-loader style-loader –save-dev
module.exports = {
entry: './main.js',
output: {
//path: './bin', //可以设置打包输出的路径
filename: 'build.js'
},
module: {
loaders: [{
test: /\.css$/,
exclude: /node_modules/, //排除指定内容
loader: 'style-loader!css-loader' //执行顺序从右向左
}]
}
};
– 执行打包
webpack
下载
cnpm install autoprefixer-loader –save-dev
配置文件
loader: 'style-loader!css-loader!autoprefixer-loader'
演示
添加私有前缀
a {
transition: transform 1s;
}
去除过期的前缀
-webkit-border-radius: 5px;
border-radius: 5px;
下载
cnpm install less-loader less –save-dev
配置文件
loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
body {
background-color: @color;
}
下载
cnpm install sass-loader node-sass –save-dev
配置文件
loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
body {
background-color: $color;
}
依赖file-loader
cnpm install file-loader –save-dev
小于80k的文件,把图片进行base64编码,减少一次http请求
{
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=80000'
}
dist
src
statics
css
images
font
!注意引用的路径(样式中引用的图片路径出问题)
运行index.html和打包的文件的路径不一致
运行路径不对,解决看下节
cnpm install webpack-dev-server –save-dev
cnpm install webpack-dev-server -g
如果使用npm run dev的方式来运行的话
需要本地安装webpack npm install webpack –save-dev
webpack-dev-server –inline –hot –open –port 3000
在package.json中配置
"scripts": {
"dev": "webpack-dev-server --inline --hot --open --port 3000"
}
inline 自动刷新
hot 热加载
open 自动在默认浏览器中打开
port 指定端口
npm run dev
删除dist中打包的内容
运行引用的图片和图标字体看不到,解决见下节
cnpm install html-webpack-plugin –save-dev
var htmlWebpackPlugin = require('html-webpack-plugin');
plugins: [
new htmlWebpackPlugin({
title: '页面标题', //生成页面标题
filename: 'index.html',
template: 'index1.html'
})
]
webpack2.0 默认支持es6的模块化语法 import/export
cnpm install babel-core babel-loader babel-preset-es2015 –save-dev
//包装能够转换.vue文件中的es6语法
cnpm install babel-plugin-transform-runtime –save-dev
loader里面配置
{
test: /\.js$/,
exclude: /node_modules/, //排除指定内容
loader: 'babel-loader'
}
//并且需要下面一行代码
let webpack = require('webpack');
plugins: [
new htmlWebpackPlugin({
title: '页面标题', //生成页面标题
filename: 'index.html', //生成在内存中的文件的名字
template: 'index1.html' //根据指定的文件生成内容--作用模板
}),
new webpack.LoaderOptionsPlugin({
options: {
babel: {
presets: ['es2015'],
plugins: ['transform-runtime'] //为了转换.vue中的es6的语法
}
}
})
]
import './statics/css/style.scss';
import './statics/css/font-awesome.css';
import obj from './add.js';
//ES6中导出模块中的对象
export default {
add: add,
sub: sub
}
//简写
export default {
add, sub
}
//更简洁的语法
export default {
add(a, b) {
return (a - 0) + (b - 0);
},
sub(a, b) {
return (a - 0) + (b - 0);
}
}
//ES6导入模块中的对象
import obj from './math.js';
//commonjs中的写法
module.exports = {
add: add,
sub: sub
}
//简写,属性名和属性值的名称相同
module.exports = {
add, sub
}
//ES6导出方法
export function add() {}
export function sub() {}
//ES6中导入方法
import {add} from './math.js'
//commonjs中的写法
module.exports = {
add: function(x, y) {
return x + y;
}
}
//导出方法简写
module.exports = {
add(x, y) {
return x + y;
}
}