webpack

作者: 咕嘟咕嘟li | 来源:发表于2018-12-03 09:48 被阅读27次
    • devtool
    • 入口起点 (entry)
    • 输出 (output)
    • 模式 (mode)
    • loader
    • 插件 (plugins)
    • 构建目标 (target)
    • 模块热替换

    webpack.config.js配置文件大致如下:

    const path = require('path');
    module.exports = {
     devtool: 'eval-source-map',
     entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件
     output: {
       path: path.resolve(__dirname, 'public'), //打包后的文件存放的地方
       filename: "bundle.js" //打包后输出文件的文件名
     },
     module: {
       rules: []
     },
     plugins: []
    }
    

    参数解读:

    devtool 选项控制是否生成,以及如何生成 source map

    devtool: 'source-map',
     //source-map(生产环境) cheap-module-source-map(生产环境)
    //eval-source-map(开发环境使用) cheap-module-eval-source-map(开发环境使用)
    

    entry

    表示webpack编译的入口文件,通常由html通过script标签引入

    loader

    loader用于对模块的源代码进行转换
    通过使用不同的loaderwebpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理,比如说分析转换scss为css,或者把下一代的JS文件(ES6,ES7)转换为现代浏览器兼容的JS文件,对React的开发而言,合适的Loaders可以把React的中用到的JSX文件转换为JS文件.

    Loaders需要单独安装并且需要在webpack.config.js中的modules关键字下进行配置


    loader配置转换scss为css,并自动添加浏览器前缀

    sudo cnpm install --save-dev style-loader css-loader sass-loader postcss-loader autoprefixer
    

    转换scss为css,并自动添加浏览器前缀

    1.配置module里rules的选项
      module: {
        rules: [
          {
            // 处理html文件,并处理img 中 src 和 data-src 的引入路径
            test: /\.html$/,
            loader: "html-loader?attrs=img:src img:data-src"
          },
          {
            test: /\.(sass|scss)$/,
            use: [
              {
                'loader':'style-loader'
              }, 
              {
                'loader': 'css-loader'
              },
              {
                loader: 'postcss-loader',
                options: {
                  sourceMap: true,
                  config: {
                    path: 'postcss.config.js' // 这个得在项目根目录创建此文件
                  }
                }
              }, 
              {
                'loader': 'sass-loader'
              },
            ]
          }
        ]
      }
    
    2. 创建postcss.config.js文件,内容如下:
    module.exports = {
      plugins: [
        require('autoprefixer'),
        require('postcss-nested')
      ]
    }
    
    3. 在package.json文件中添加 browserslist
    "browserslist": [
        "defaults",
        "not ie < 11",
        "last 2 versions",
        "> 1%",
        "iOS 7",
        "last 3 iOS versions"
      ]
    

    loader配置编译图片

    sudo cnpm install --save-dev url-loader file-loader
    

    往loaders模块的rules里添加:

    {
       test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
       loader: 'url-loader?limit=1&name=src/images/[name].[ext]'
    }
    

    loader配置编译 js

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

    往loaders模块的rules里添加:

    {
        test: /\.js$/,
        loader: 'babel-loader',
        query: {
           presets: ['es2015']
        }
    }
    

    新建 .babelrc文件,内容如下:

    {
        "presets": ["es2015"],
        "comments": false
    }
    

    plugins用于解决loader无法实现的其他事
    由于插件可以携带参数,必须在 webpack 配置中,向 plugins 属性传入 new 实例。

    1.通过cnpm/npm安装好插件
    2.在 webpack 配置中,向 plugins 属性传入 new 实例。
    列:

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

    webpack.config.js文件添加:

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

    在 webpack 配置中,向 plugins 属性传入 new 实例:

    plugins: [
        new HtmlWebpackPlugin({ 
            filename: "index.html", // 生成的模板文件的名字 默认index.html
            template: "index.html", // 模板来源文件
        })
      ]
    

    多页面练习demo可查看:https://coding.net/u/wanghongli/p/webpack-practice

    相关文章

      网友评论

          本文标题:webpack

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