02-webpack的使用

作者: 琪先生_zZ | 来源:发表于2017-07-15 15:59 被阅读52次

webpack的使用


Webpack的介绍

  • Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 CMD 模块、ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

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

  • 下载style-loader和css-loader

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

autoprefixer-loader自动添加css前缀

  • 下载
    cnpm install autoprefixer-loader --save-dev

  • 配置文件

 loader: 'style-loader!css-loader!autoprefixer-loader'
  • 演示
  • 添加私有前缀
    a {
    transition: transform 1s;
    }

  • 去除过期的前缀
    -webkit-border-radius: 5px;
    border-radius: 5px;

打包less

  • 下载
    cnpm install less-loader less --save-dev

  • 配置文件

 loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
  • 演示(.less文件)
@color: yellow;

body {
    background-color: @color;
}

打包sass

  • 下载
    cnpm install sass-loader node-sass --save-dev

  • 配置文件

 loader: 'style-loader!css-loader!autoprefixer-loader!less-loader'
  • 演示(.scss)
$color: red;

body {
    background-color: $color;
}

url-loader

  • 下载
    cnpm install url-loader --save-dev

  • 依赖file-loader
    cnpm install file-loader --save-dev

  • 配置文件
    小于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和打包的文件的路径不一致
运行路径不对,解决看下节

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

  • 下载安装webpack-dev-server和html-webpack-plugin
    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中打包的内容
运行引用的图片和图标字体看不到,解决见下节

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

  • 下载html-webpack-plugin

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

  • 配置 webpack.config.js
    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

  • 配置 webpack.config.js
    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语法

  • 导入外部文件,导入css文件
import './statics/css/style.scss';
import './statics/css/font-awesome.css';
  • 导入一个js模块,接受一个对象
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;
    }
}

相关文章

  • 02-webpack的使用

    webpack的使用 Webpack的介绍 Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许...

  • 02-webpack安装

    1、 前提条件 在开始之前,请确保安装了 Node.js 的最新版本。使用旧版本,你可能遇到各种问题,因为它们可能...

  • 02-webpack打包样式

    文件目录 css文件 less文件 js文件 webpack.config 运行 webpack 会加载webpa...

  • 02-webpack核心基础-Webpack中sourcemap

    一:什么是SourceMap? 我们在项目进行打包后,会将开发中的多个文件代码打包到一个文件中,并且经过压缩,去掉...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

网友评论

    本文标题:02-webpack的使用

    本文链接:https://www.haomeiwen.com/subject/vixzhxtx.html