手动搭建webpack

webpack打包

①在全局安装webpack、webpack-cli

cnpm i webpack -g
cnpm i webpack-cli -g (4.0+)
cnpm i yarn -g   

②新建项目文件夹,cnpm init -y 初始化

我们需要使用webpack.config.js进行配置

const baseConfig = require("./config/base"); //{entry:,output}
const devConfig = require("./config/dev");  //{mode:"development"}
const prodConfit = require("./config/prod");   //{mode:"production"}

将小的配置项单独拿出来配置(config>base.js、dev.js、prod.js)

在base 中设置webpack入口 出口的配置

const config = {
    //设置被webpack打包的入口文件
    //打包多个文件,写成数组的形式
    entry:{
        main:"./src/main.js",
        vendor:"./src/vendor.js"
    },
    output:{ //设置被webpack打包后的出口文件
        path:__dirname+'/../dist',
        filename:'[name].js' //通过[name]就会通过entry的key来生成多出口文件
    }
}
module.exports = config;

dev、prod 声明模式(开发模式、生产模式)

let config = {
    mode:"production"
}

需求:在开发模式下使用dev,生产模式下使用prod(带hash值)

判断是生产模式还是开发模式:

webpack.config.js 在导出的时候可以返回一个函数,在函数中可以传值,通过传值来判断是开发模式还是生产模式

在控制台中写webpack --env prod 。webpack就可以接收到prod,采用生产模式打包

const baseConfig = require("./config/base"); //{entry:,output}
const devConfig = require("./config/dev");  //{mode:"development"}
const prodConfit = require("./config/prod");   //{mode:"production"}


module.exports = function(env){
    console.log("参数为"+env)
    let config = {}
    if(env==="prod"){//如果为生产环境的打包,就将文件名带上hash值。
        config = {...baseConfig,...prodConfit.config}
        // config.output.filename = "[name]_[hash].js"
        config.output.filename = prodConfit.filename
    }else{
        //否则利用开发模式
        config = {...baseConfig,...devConfig}
    }
    return config;
}

在package.json中“scripts”里设置如下:

执行cnpm start相当于运行dev:“webpack”

"scripts": {
    "dev": "webpack",
    "build": "webpack --env prod",
    "start": "npm run dev"
  }

通过html-webpack-plugin 插件自动生成index.html页面,并将打包好的js代码自动引入

cnpm i html-webpack-plugin -D 

此插件只在开发模式中使用即可,安装好后直接在dev.js中引入并配置

配置

const HtmlWebpackPlugin = require("html-webpack-plugin")//引入
module.exports = {
    mode:"development",
    plugins:[//配置HtmlWebpackPlugin
        new HtmlWebpackPlugin({
            title:"学习react" //在配置项中可设置title
            template:"./src/index.html"//设置默认使用的模板
            minify:{
                ...
            }
        })
    ]
}

在配置项中有minify:{…}配置

传递 html-minifier 选项给 minify 输出,false就是不使用html压缩,minify具体配置参数请点击
其中有若干参数文档

下面使用minify中的collapseWhitespace来压缩html代码

const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = {
    mode:"development",
    plugins:[
        new HtmlWebpackPlugin({
            // title:"学习react"
            template:"./src/index.html",
            minify:{
                collapseWhitespace:true//解决空白字符问题,也就是压缩
            }
        })
    ]
}
要解析css样式文件,要下载css-loader和style-loader两个解析器
cnpm i css-loader style-loader --save-dev

并且要在使用环境dev中配置

module:{
    rules:[
        {test:/\.css$/,use:['style-loader','css-loader']},//use的顺序,从后往前
    ]
}
要解析scss样式文件,要下载css-loader、style-loader、sass-loader、node-sass
cnpm i style-loader -D
cnpm i css-loader -D
cnpm i sass-loader -D
cnpm i node-sass -D

同样要进行配置

module:{
    rules:[
        {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']}//use的顺序,从后往前
    ]
}
postcss-loader解析器:加前缀样式兼容

①安装 postcss-loader autoprefixer 两个插件

cnpm install --save-dev postcss-loader autoprefixer 

对post-loader进行配置

//根目录创建postcss.config.js
module.exports = {
    plugins:[
        require("autoprefixer")
    ]
}
//loader配置
use: ['style-loader','css-loader',{
        loader: 'postcss-loader',
        options: {
            config: {
                path: 'postcss.config.js'  // 这个得在项目根目录创建此文件
            }
        }
        },'sass-loader']
//package.json上面添加
"browserslist": [
    "defaults",
    "not ie < 11",
    "last 2 versions",
    "> 1%",
    "iOS 7",
    "last 3 iOS versions"
  ]

个人笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值