Webpack开发环境配置

手动构建Webpack开发环境
WebPack基础教程
Webpack开发环境配置
webpack+sass+babel+postcss配置
Webpack多页面配置

开发环境配置

接入门教程一

处理CSS的兼容性

  1. 通过postcss-loader来处理css的兼容性

    我们可以通过post-css来处理我们的css兼容性,通过autoprefixer这个插件来让webpack自动为我们的css添加前缀

    安装postcss-loader与autoprefixer

    $ cnpm install postcss-loader autoprefixer --save-dev
    
  2. 安装完成以后,我们需要在webpack.config.dev.js中去配置我们的文件

    {
        test: /\.scss$/,
            use: [
                "style-loader",
                "css-loader",
                {
                    loader: "postcss-loader",
                    options: {
                        config: {
                            path: path.join(__dirname, "./postcss.config.js")
                        }
                    }
                },
                "sass-loader"
            ]
    }
    

    说明:上面的代码,我们配置制到module里面的rules这个属性里在,我们处理了scss的文件,同时,在loader里面,我们添加了一项postcss-loader这个文件,在里面,我们配置了一项config。这个config就是postcss的配置,告诉webpack要怎么要去处理我们的css兼容性

  3. 在项目的根目录创建postcss.config.js文件,打开文件,去添加如下内容

    var postcssConfig = {
        "plugins": {
            "autoprefixer": {
                //正常情况之下,我们应该配置一个浏览器列表,但是,我不推荐大家在这里配置
                //babel也需要一个浏览器列表
    
            }
        }
    }
    module.exports = postcssConfig;
    //module.exports={}
    

    上面的代码是postcss.config.js的配置文件,在里面,我们配置了一个plugins插件,同时,指向了一个autoprefixer这个插件,这个插件的作用就是把我们的css前缀自动补全

  4. 在package.json里在,添加一个节点browserslist,告诉webpack我们要使用那些浏览器的兼容性

    "browserslist": [
        "> 1%",
        "last 2 versions",
        "not ie <= 8"
    ]
    
  5. 这个时候,我们再看到的CSS就有经过兼容性处理了。如下图所示:

在这里插入图片描述

处理JS的兼容性

我们的CSS兼容性我们可以通过webpack来进行处理,同时,我们的css的兼容性也可以通过webpack来进行处理!同样,处理这个兼容性,我们也需要一个第三方的插件,这个插件就是我们的babel

babel是一个专门用于处理我们的es6代码的插件,它有一个特别重要的功能就是把我们的es6代码转换为我们浏览器所能够运行的普通代码

  1. 安装babel相关插件

    $ cnpm install babel-core babel-loader
    

    说明:上面的两个包就是专门用来处理我们的es6的两个babel插件

  2. 配置webpack.config.dev.js文件,让babel去处理我们的js代码

    {
        test: /\.js$/,
            use: [
                "babel-loader"
            ],
        exclude: /node_modules/
    }
    

    说明:上面的代码告诉了webpack如何去处理我们的js代码,同时,最后一个exclude告诉webpack不要去处理node_modules里面的代码

  3. 在项目的根目录下面创建.babelrc的文件,这个文件是专门用来告诉webpack以一种什么样的规则去处理我们的js代码

    .babelrc的配置如下

    {
        "presets": [
            "env", "stage-0"
        ]
    }
    

    说明:babel会以我们package.json下面的browserslist里面的配置来处理我们的JS兼容性

  4. 因为上面的.babelrc配置里面使用了envstage-0这两个处理规则,所以,我们需要安装这两个模块

    $ cnpm install babel-preset-env babel-preset-stage-0 --save-dev
    
  5. 安装babel专门用来处理异步async与await的模块

    在babel里面,有一套专门用来处理异步操作的模块,这个模块叫babel-polyfill,现在,我们安装这个模块,用来去处理我们在开发过程当中所遇到的异步操作

    $ cnpm install babel-polyfill --save-dev
    
  6. 在webpack.config.dev.js当中去配置babel-polyfill的配置

    babel-polyfill需要配置在程序的启动的地方,这个时候,我们需要在webpack.config.dev.js里面的入口entry处去修改代码,将entry修改如下

    entry: ["babel-polyfill", path.join(__dirname, "./src/js/main.js")]
    

经过上面的处理以后,我们就已经可以去让我们的JS代码经过webpack打包,让babel去转换,最终生成一个能够在浏览器上面运行的代码了

webpack生产环境的配置

在webpack里在,我们的操作一直都是在生产环境下面进行,如果要让我们编写好的html与css最终生成一个文件,这个时候,我们就需要在webpack当中去配置我们的生产环境

webpack的生产环境配置与开发环境大致相同,步骤如下:

  1. 首先,我们新建一个webpack的生产环境配置文件webpack.config.pro.js,将webpack.config.dev.js中的代码复制过来(在此处需要注意,不要把devServer里面的东西复制过来了,这个devServer是webpack开发环境独有的)

  2. 在webpack.config.pro.js的配置文件里面,我们要做到CSS样式与JS代码分离,就需要使用一个第三方插件包,这个插件叫extract-text-webpack-plugin,现在,我们安装这个插件

    $ cnpm install extract-text-webpack-plugin --save-dev
    
  3. 在webpack.config.pro.js时面去导入刚刚安装的模块extract-text-webpack-plugin

    const ExtractPlugin=require('extract-text-webpack-plugin');
    
  4. 修改webpack.config.pro.js里面module下的rules里面的配置文件,把css以及scss的处理规则更改为如下:

    {
        test: /\.scss$/,
            use: ExtractPlugin.extract({
                fallback: "style-loader",
                use: [{
                    loader: "css-loader",
                    options: {
                        minimize: true //生成的CSS代码进行压缩处理
                    }
                },
                      {
                          loader: "postcss-loader",
                          options: {
                              config: {
                                  path: path.join(__dirname, "./postcss.config.js")
                              }
                          }
                      },
                      "sass-loader"
                     ]
            })
    }
    

    说明:在上面的代码当中,我们使用了ExtractPlugin这一个插件,这个插件就是我们刚刚在第三步的时候导入的插件,在css-loader里面,我们使用了个选项minimize:true的这个选项,这个选项的作用就是让生成的CSS代码做压缩处理

  5. 在webpack.config.pro.js的plugins的选项里面,添加ExtractPlugin插件,告诉webpack最终生成的css文件的名称是什么

    plugins: [
        new HTMLPlugin({
        template: "index.html",
        filename: "aaa.html",
        inject: true
        }),
        new ExtractPlugin("index.css"), //指定新生成的css的文件名为index.css
    ]
    

    代码说明:添加的new ExtractPlugin("index.css")代码新生成的css文件为index.css

  6. 为生成的JS代码做压缩处理

    我们的css代码可以做到压缩处理,同样,我们的JS代码也可以进行压缩,但是在压缩的过程当中,我们需要使用一个第三方的插件,这个插件就是uglifyjs-webpack-plugin,现在我们安装这个插件

    $ cnpm install uglifyjs-webpack-plugin --save-dev
    
  7. 在webpack.config.pro.js的这个配置文件里面,我们导入刚刚安装的插件,代码如下:

    const uglifyjsPlugin = require('uglifyjs-webpack-plugin');
    
  8. 在webpack.config.pro.js的plugins里面,添加刚刚导入的插件,最终代码如下:

    plugins: [
        new HTMLPlugin({
            template: "index.html",
            filename: "aaa.html",
            inject: true
        }),
        new ExtractPlugin("index.css"), //指定新生成的css的文件名为index.css
        new uglifyjsPlugin()
    ]
    
  9. 在package.json里面,添加生成的命令

    在package.json的scripts的节点下面添加下面的命令中的build命令

    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "dev": "webpack-dev-server --config webpack.config.dev.js",
        "build": "webpack --config webpack.config.pro.js"
      }
    

至此,我们的生产环境就全部完成了,现在,我将开发环境的webpack.config.dev.js的代码与生产环境的webpack.config.pro.js的代码放到下面

  • webpack.config.dev.js代码

    //开发环境
    const path = require('path');
    const HTMLPlugin = require('html-webpack-plugin');
    var config = {
        entry: ["babel-polyfill", path.join(__dirname, "./src/js/main.js")],
        output: {
            filename: "bundle.js",
            path: path.join(__dirname, "/dist")
        },
        module: {
            rules: [{
                test: /\.js$/,
                use: [
                    "babel-loader"
                ],
                exclude: /node_modules/
            }, {
                test: /\.scss$/,
                use: [
                    "style-loader",
                    "css-loader",
                    {
                        loader: "postcss-loader",
                        options: {
                            config: {
                                path: path.join(__dirname, "./postcss.config.js")
                            }
                        }
                    },
                    "sass-loader"
                ]
            }, {
                test: /\.(jpg|jpeg|svg|bmp|gif|icon|png)$/,
                use: [{
                    loader: "url-loader",
                    options: {
                        name: '[name]-abc.[ext]'
                    }
                }]
            }]
        },
        plugins: [
            new HTMLPlugin({
                template: "index.html",
                inject: true
            })
        ],
        devServer: {
            host: "0.0.0.0",
            port: 9999,
            overlay: {
                errors: true //将错误信息抛出到页面上面,提示出来
            }
        }
    }
    module.exports = config;
    
  • webpack.config.pro.js代码

    //生产环境
    //开发环境
    const path = require('path');
    const HTMLPlugin = require('html-webpack-plugin');
    const ExtractPlugin = require('extract-text-webpack-plugin');
    const uglifyjsPlugin = require('uglifyjs-webpack-plugin');
    var config = {
        entry: ["babel-polyfill", path.join(__dirname, "./src/js/main.js")],
        output: {
            filename: "bundle.js",
            path: path.join(__dirname, "/dist")
        },
        module: {
            rules: [{
                test: /\.js$/,
                use: [
                    "babel-loader"
                ],
                exclude: /node_modules/
            }, {
                test: /\.scss$/,
                use: ExtractPlugin.extract({
                    fallback: "style-loader",
                    use: [{
                            loader: "css-loader",
                            options: {
                                minimize: true //生成的CSS代码进行压缩处理
                            }
                        },
                        {
                            loader: "postcss-loader",
                            options: {
                                config: {
                                    path: path.join(__dirname, "./postcss.config.js")
                                }
                            }
                        },
                        "sass-loader"
                    ]
                })
            }, {
                test: /\.(jpg|jpeg|svg|bmp|gif|icon|png)$/,
                use: [{
                    loader: "url-loader",
                    options: {
                        name: '[name]-abc.[ext]' //在生产环境下面,生成的新的文件的名称
                    }
                }]
            }]
        },
        plugins: [
            new HTMLPlugin({
                template: "index.html",
                filename: "aaa.html",
                inject: true
            }),
            new ExtractPlugin("index.css"), //指定新生成的css的文件名为index.css
            new uglifyjsPlugin()
        ]
    }
    module.exports = config;
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值