Webpack. Gulp Web前端之路让前端飞

02-webpack的使用

2017-07-15  本文已影响52人  琪先生_zZ

webpack的使用


Webpack的介绍

webpack安装

npm install webpack -g

Webpack的使用

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常用的Loader

webpack默认只能打包js文件

打包css文件

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'  //执行顺序从右向左
         }]
     }
 };

autoprefixer-loader自动添加css前缀

 loader: 'style-loader!css-loader!autoprefixer-loader'

打包less

 loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
@color: yellow;

body {
    background-color: @color;
}

打包sass

 loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
$color: red;

body {
    background-color: $color;
}

url-loader

    小于80k的文件,把图片进行base64编码,减少一次http请求

 {
    test: /\.(png|jpg)$/,
    loader: 'url-loader?limit=80000'  
 }
{
    test: /\.(png|jpg|eot|svg|ttf|woff|otf)/,
    loader: 'url-loader?limit=80000' //可以简写'url?limit=20000'  单位是字节
}

设置路径

dist
src
 |__  statics
 |__   css
 |__  images
 |__   font

!注意引用的路径(样式中引用的图片路径出问题)
运行index.html和打包的文件的路径不一致
运行路径不对,解决看下节

实时打包和浏览器实时刷新

如果使用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中打包的内容
运行引用的图片和图标字体看不到,解决见下节

在内存中生成index.html,并且自动打包编译的文件(app.js中引用的文件)

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

    var htmlWebpackPlugin = require('html-webpack-plugin');

    plugins: [
        new htmlWebpackPlugin({
            title: '页面标题',  //生成页面标题
            filename: 'index.html',
            template: 'index1.html'
        })
     ]

ES6转ES5

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的语法
            }
         }
       })
     ]

常用到的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;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读