Uso básico del entorno de desarrollo de paquetes web y manejo de problemas de compatibilidad de versiones.

que es paquete web

  • webpack es un ataque de creación de recursos de front-end, un paquete de módulos estáticos

Cinco conceptos básicos de webpack

  • archivo de entrada de entrada
  • Indicación de salida de salida (dónde va la salida)
  • loader permite que webpack procese archivos que no sean JavaScript
  • complemento de complementos, empaquetado optimizado, compresión
  • modo archivo de configuración desarrollo entorno de desarrollo producción entorno de producción

Inicializar el proyecto

npm init

Instalar paquete web

npm i webpack webpackcli -D

problemas de compatibilidad del paquete web

  • Instale la versión 4 de webpack y la versión 3 de webpack-cli
npm i webpack@4 webpackcli@3 -D

ejecutar paquete web

  • entorno de desarrollo
webpack ./src/index.js -o ./build/build.js --mode=development 
  • Entorno de producción
 webpack ./src/index.js -o ./build/build.js --mode=production

webpack puede manejar recursos js/json, pero no recursos css/img

recursos de empaquetado webpack

La diferencia entre el middleware incorporado path.join y path.resolve

  • unirse es conectar cada segmento de la ruta, resolver toma '/' como el directorio raíz
  • Cuando essolve pasa en un no/ruta, agregará automáticamente el directorio actual para formar una ruta absoluta, y la combinación solo se usa para el empalme de rutas

css\menos empaquetado de recursos

Versión recomendada de cada paquete

Comando de empaquetado webpack

Crear webpack.config.js:

/*
    webpack配置文件
        作用:指示webpack干哪些活

        所有的构建工具都是基于nodejs平台运行的  模块化采用的common.js

*/
const {
    
    resolve} = require('path');
module.exports ={
    
    
    // webpack配置
    // 入口起点
    entry: './src/index.js',
    // 输出
    output: {
    
    
        filename: 'build.js',
        path: resolve(__dirname, 'build')
    },
    // loader的配置
    module: {
    
    
        rules:[
            // 详细配置loader配置
            {
    
    
                test: /\.css$/,
                // use中的执行顺序  从下到上
                // npm i  [email protected]  [email protected] -D
                use: [
                    // 创建一个style标签将js中的样式资源插入进入
                    'style-loader',
                    // 将css文件变成common.js模块加载js中,里面内容是样式字符串
                    'css-loader'
                ]
            },
            {
    
    
                test: /\.less$/,
                use:[
                    'style-loader',
                    'css-loader',
                    // 将less加载成css文件   [email protected] less  npm i [email protected]
                    'less-loader'
                ]
            }
        ]
    },
    // 插件
    plugins:[

    ],
    // 模式
    mode: 'development' //开发模式
}

Paquete de recursos html

Versión recomendada de cada paquete

/*
    loader 下载 使用
    plugins 下载 引入 使用

*/
const HtmlWebpackPlugin = require('html-webpack-plugin')

plugins:[
        // html-webpack-plugin   [email protected]
        // 作用:创建一个空的html文件 引入打包输出的所有资源(js/css)
        new HtmlWebpackPlugin({
    
    
            // 复制'./src/index.js'  并自动引入打包输出的所有资源
            template : './src/index.html'
        })

],

Paquete de recursos de imagen

El paquete utilizado y la versión correspondiente.

Nota: cierre esModule, de lo contrario, no es necesario importar el cargador de archivos en img

webpack.config.js

const {
    
    resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports ={
    
    
    entry:'./src/index.js',
    output:{
    
    
        filename: 'build.js',
        path: resolve(__dirname,'./build')
    },
    module: {
    
    
        rules: [
            {
    
    
                test: /\.css$/,
                use:[
                    'style-loader',
                    'css-loader',
                ]
            },
            {
    
    
                // 下载两个包 [email protected] [email protected]
                // 问题默认处理不了html中img的图片
                test: /\.(jpg|png|gif)$/,
                loader: 'url-loader',
                options: {
    
    
                    // 图片大小小于8kb,就会被base64处理
                    // 优点:减少请求数量(减轻服务器压力)
                    // 缺点:图片体积会更大(文件速度会更慢)
                    limit: 8 * 1024,
                    // 问题:因为url-loader在默认使用es6模块化解析,而html-loader引入图片是commonjs
                    // 解析时会出现问题:[object Module]
                    // 解决:关闭url-loader的es6模块化,使用commonjs解析
                    esModule: false,
                    // [hash:10]取图片hash的前10位
                    // [ext]取文件原来扩展名
                    name: '[hash:10].[ext]'
                }
                
            },
            {
    
    
                test: /\.html$/,
                // 处理html文件的img图片(负责引入img,从而被url-loader进行处理)[email protected] -D
                loader: 'html-loader',
            }

        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
    
    
            template:'./src/index.html'
        })
    ],
    mode: 'development',
}

Empaquetar otros recursos

webpack.config.js

module:{
    
    

       .......

            // 打包其他资源(除了html/js/css资源)
            {
    
    
                exclude: /\.(css|js|html)$/,
                loader: 'file-loader',
                options: {
    
    
                    name:'[hash:10].[ext]'
                }
            }
            
        ]
    },

Uso de webpack-dev-server

descarga del paquete

module.exports ={
    
    

    ......

    // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
    // 特点:没有输出只会在内存中打包,不会有任何输出
    // 启动devServer指令为: [email protected]
    devServer:{
    
    
        contentBase: resolve(__dirname,'build'),
        // 启动gzip压缩
        compress:true,
        // 使用localhost:3000进行查看
        port:'3000',
        // 自动打开浏览器
        open:true,

    }

}

Configuración completa del entorno de desarrollo.

webpack.config.js

// 开发环境的配置:能让代码运行即可

const {
    
    resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    
    
    entry: './src/index.js',
    output: {
    
    
        filename: 'build.js',
        path: resolve(__dirname,'build')
    },
    module: {
    
    
        rules: [
            {
    
    
                test: /\.css$/,
                use:[
                    'style-loader',
                    'css-loader',
                ]
            },
            {
    
    
                test: /\.html$/,
                loader: 'html-loader',
            },
            {
    
    
                test: /\.(jpg||png||jpg)$/,
                loader: 'url-loader',
                options: {
    
    
                    limit: 8 * 1024,
                    esModule: false,
                    name:'[hash:10].[ext]'
                }
            },
            {
    
    
                test: /\.less$/,
                use:[
                    'style-loader',
                    'css-loader',
                    'less-loader'
                ]
            },
            {
    
    
                exclude: /\.(html||css||js)/,
                loader: 'file-loader',
                options:{
    
    
                    name:'[hash:10].[ext]'
                }
            }
        ]
    } ,
    plugins:[
        new HtmlWebpackPlugin({
    
    
            template:'./src/index.html'
        })
    ],
    devServer:{
    
    
        contentBase: resolve(__dirname,'build'),
        compress: true,
        port: 3000,
        open: true
    },
    mode: 'development'

}

Supongo que te gusta

Origin blog.csdn.net/weixin_45822938/article/details/123435660
Recomendado
Clasificación