美文网首页
webpack tutorial

webpack tutorial

作者: Herman7z | 来源:发表于2018-03-22 14:45 被阅读0次

    第1章 webpack 安装以及命令行

    使用npm初始化项目

    cnpm init
    

    安装webpack

    cnpm install webpack --save-dev
    

    打包文件

    webpack hello.js hello.bundle.js
    

    安装css-loader,style-loader处理css

    cnpm install css-loader style-loader --save-dev
    

    第2章 webpack 基本配置

    官网配置:https://webpack.js.org/configuration/

    默认情况下,执行 webpack 命令会在当前目录下找配置文件webpack.config.js
    也可以在命令行上指定配置文件

    webpack --config webpack.dev.config.js
    

    通过package.json配置webpack:

    {
      "name": "02starter",
      "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 --colors --progress"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "webpack": "^2.2.1"
      }
    }
    

    第三章 自动化生成项目中的html页面

    安装插件

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

    配置 html-webpack-plugin

    var htmlWebpackPlugin = require('html-webpack-plugin');
    module.exports = {
            entry:'./src/script/main.js',   //配置入口文件
            output:{
                    path:'./dist',      //配置打包后文件的存放位置
                    filename:'js/[name]-[hash].js', //配置打包后文件的名字
                    publicPath:'http://cdn.com'  //配置上线地址,打包后所有js的引用地址都会被替换
            },
            plugins:[
                    new htmlWebpackPlugin({
                            filename:'index-[hash].html',
                            template: 'index.html',  //配置模版文件
                            inject:'head',  //嵌入到什么位置  默认是body
                            title:'webpack tutorial starter....',
                            minify:{  //配置压缩
                                    removeComments:true,   //删除注释
                                    collapseWhitespace:true  //删除空格
                            }
                    })
            ]
    }
    

    在模版文件中取 插件配置的参数

    <!DOCTYPE html>
    <html>
    <head>
            <title><%= htmlWebpackPlugin.options.title %></title>
    </head>
    <body>
    </body>
    </html>
    
    查看htmlWebpackPlugin中有哪些配置参数
    <!DOCTYPE html>
    <html>
    <head>
            <title><%= htmlWebpackPlugin.options.title %></title>
    </head>
    <body>
    
    <% for (var key in htmlWebpackPlugin.files) { %>
            <%= key %> : <%= JSON.stringify(htmlWebpackPlugin.files[key])%>
    <% } %>
    
    =====================
    
    <% for (var key in htmlWebpackPlugin.options) { %>
            <%= key %> : <%= JSON.stringify(htmlWebpackPlugin.options[key])%>
    <% } %>
    
    
    </body>
    </html>
    

    chunks : 指定对当前模版有用的chunk
    excludeChunks: 与chunks 相反

    第四章 处理项目中的资源文件

    babel-loader官网:http://babeljs.io/docs/setup/#installation 把 es6 语法解析成浏览器能够识别的语言

    安装 babel

    cnpm install babel-loader babel-core babel-preset-env --save-dev
    

    配置 babel-loader

    module:{
      loaders: [
        {
          test: /\.js$/,
          exclude: '',   //过滤文件夹 只能是绝对路径  或者 正则表达式
          include: './src/',
          loader: 'babel-loader',
          query: {
            presets: ['env']     //选择使用的preset
          }
        }
      ]
    }
    

    exclude 配置详解:https://webpack.js.org/configuration/module/#condition

    处理项目中的 css

    {
        test:/\.css$/,
        loader:'style-loader!css-loader'
    }
    

    安装 postcss-loader ,对于一些浏览器支持不太好的css 添加一些前缀,让不同浏览器支持
    cnpm install postcss-loader --save-dev
    cnpm install autoprefixer --save-dev

    参考配置:
    {
    test:/.css$/,
    use: [
    {
    loader:'style-loader'
    },
    {
    loader:'css-loader?importLoaders=1' //指定在css-loader之后 通过 @import 导入的css需要经过几个loader处理, 因为后面只有一个
    postcss-loader,所以 = 1
    },
    {
    loader:'postcss-loader',
    options: {
    plugins: function () {
    return [
    require('autoprefixer')
    ];
    }
    }
    }
    ]
    }

    使用 less 和 sass

    cnpm install less-loader --save-dev
    

    配置 less-loader:

    {
       test:/\.less$/,
       loader:'style-loader!css-loader!postcss-loader!less-loader'
    }
    

    处理模板文件
    cnpm install html-loader --save-dev

    {
       test:/\.html$/,
       loader:'html-loader'
    }
    

    处理图片以及其他文件
    cnpm install file-loader --save-dev

    {
       test:/\.(png|jpg|svg|gif)$/i,  // i 不区分大小写
       loader:'file-loader',query: {
       name: 'assets/[name]-[hash].[ext]'
    }
    

    如果在模版文件中使用到了图片,尽量使用绝对地址,
    或者使用 require 加载文件
    <img src="${ require('../assets/123.png') }"/>

    url-loader : 和 file-loader 很类似,多了一个配置参数,limit
    如果文件的大小小于配置的limit,那么 它会把文件转换成为一个base64的编码,
    如果大于了配置的limit,那么会把文件直接丢给 file-loader处理

    {
        test: /\.(png|jpg|svg|gif)$/i,
        loader: 'url-loader',
        query: {
            limit: 20000,   //设置20k的大小限制
            name: 'assets/[name]-[hash].[ext]'
        }
    }
    

    image-webpack-loader: 图片压缩loader, 通常配合file-loader使用

    {
        test: /\.(png|jpg|svg|gif)$/i,
        use: [
            'url-loader?limit=60000&name=assets/[name]-[hash].[ext]',
            'image-webpack-loader'
        ]
    }
    

    相关文章

      网友评论

          本文标题:webpack tutorial

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