webpack基础应用
创始人
2024-06-03 15:33:19

webpack基础应用

概述和基础操作

自动化打包工具:webpack

传统项目:

通过script引js

html一个 js一个,所有所用到的js按照依赖关系谁先引谁后引最终合到一个js,并且能进行压缩,并且能进行词法解析 词法检测。有助于性能优化

那这些依托工具来实现 图片base64,那就不需要http请求而且浏览器能直接渲染。不需要解码编译过程

less:浏览器不能直接识别,less编译成css

把新语法能够变成老语法兼容的那种形式

@import require

fs: 建立依赖关系,根据依赖关系读取到每个文件的内容最终合到一个文件并进行压缩。基于fs来完成。

yarn 快

全局:使用命令。但是只能安装一个版本

本地:import 或 require

4.0 需要安装的

webpack webpack-cli

webpack-cli: 命令提示工具。webpack里面用来进行操作命令操作的模块

开发环境依赖:基于webpack把项目打包好了,部署到服务器上的时候就不需要webpack。

npx

但是npx能执行本地安装的模块,能把本地的模块当做命令使用

b4734730fa10eea67d400d782c8a7edc.png

npx webpack:基于npx执行webpack命令。

工作原理:xxx.cmd

/node_modules/.bin/webpack.cmd

8e5cfff8183df675315d975cd2dd2be6.png

package.json中配置可执行脚本命令scripts

package.json中配置可执行脚本命令

浏览器肯定不支持commonjs 和 es6 规范的

 

自定义配置*

src/main.js

基于webpack配置自己的规则,走自己的规则实现自己的效果

webpack给了一个默认的文件,必须写在默认文件里才行

会去项目根目录下找webpack.config.js,若有就走自己的规则若没有就走默认打包规则;

webpack是基于nodejs,那么我们写webpack的时候都需要commonjs来导出去

压缩后的代码:

放到服务器后的东西得压缩

把es6 commonjs的语法识别,自己重构一套模块规范的语法

原生js怎么实现commonjs规范 怎么实现es6规范

1c4f7603721903acc5d44c501d0e9819.png

使用--config 改变配置文件名称

真实项目中,webpack.config.dev.js/webpack.config.pro.js配置2套或3套

var path = require('path');// var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: "bundle.min.js",
        // 输出路径必须是绝对路径
        path: path.join(__dirname,"/dist"),
    },
    // plugins: [
    //     new HtmlWebpackPlugin({
    //         template: path.join(__dirname + "/app/index.html")
    //     }),
    // ],
    // devServer: {
    //     port:3000,
    //     contentBase: "./",
    //     hot: true,
    //     proxy:{
    //         '/jsonapi':{
    //             target:'http://127.0.0.1:8080',
    //             changeOrigin:true
    //         }
    //     }
    // }
}

webpack-dev-server*

帮我们创建一个开发服务

创建一个后台服务:接收客户端请求 静态资源文件的请求处理+接口的请求处理

这也是个开发依赖 部署到服务器上已有服务,只有开发的时候才需要自己启一个服务自己来做

服务就得有:协议+域名+端口号

作用:webpack-dev-server打包+启动服务; webpack只能打包

自动访问build目录下的index.html

var path = require('path');// var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: "bundle.min.js",
        // 输出路径必须是绝对路径
        path: path.join(__dirname,"/build"),
    },
    // plugins: [
    //     new HtmlWebpackPlugin({
    //         template: path.join(__dirname + "/app/index.html")
    //     }),
    // ],
    devServer: {
        port:3000,
        // contentBase: "./build",
        contentBase: path.join(__dirname, 'build'),
        hot: true,
        open:true,
        // proxy:{
        //     '/jsonapi':{
        //         target:'http://127.0.0.1:8080',
        //         changeOrigin:true
        //     }
        // }
    }
}

HTML输出编译

目前只能实现js的合并压缩打包

css js HTML img

每个插件都是一个类

编译HTML 打包build目录下。把HTML也能实现压缩

把编译后的js自动引入到HTML中

浏览器访问的时候有缓存

script get请求

link img iframe

const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: "bundle.min.[hash].js",
        // 输出路径必须是绝对路径
        path: path.join(__dirname,"/build"),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html',
            filename: "index.html"
        }),
    ],
    devServer: {
        port:3000,
        // contentBase: "./build",
        contentBase: path.join(__dirname, 'build'),
        hot: true,
        open:true,
        // proxy:{
        //     '/jsonapi':{
        //         target:'http://127.0.0.1:8080',
        //         changeOrigin:true
        //     }
        // }
    }
}

css样式

处理html的用的是插件

css-loader:@import url, 导入外部资源的语法能进行编译和处理

入口js要引入css

css兼容

const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: "bundle.min.[hash].js",
        // 输出路径必须是绝对路径
        path: path.join(__dirname,"/build"),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html',
            filename: "index.html"
        }),
    ],
    devServer: {
        port:3000,
        // contentBase: "./build",
        contentBase: path.join(__dirname, 'build'),
        hot: true,
        // open:true,
        // proxy:{
        //     '/jsonapi':{
        //         target:'http://127.0.0.1:8080',
        //         changeOrigin:true
        //     }
        // }
    },
    module: {
        rules:[
            {
                test:/\.(css|less)$/,
                use:[
                    'style-loader',
                    'css-loader',
                    'postcss-loader',
                    'less-loader'
                ]
            },
        ]
    }
}

module.exports={
    plugins:[
        require('autoprefixer')
    ]
}

css的抽离和压缩

抽离css

1.new MiniCssExtractPlugin({ filename:'main.min.css' })2.use:[// 'style-loader',
    MiniCssExtractPlugin.loader,
    'css-loader',
    'postcss-loader',
    'less-loader'
]3.optimization: {
        minimizer: [
            new OptimizeCssAssetsWebpackPlugin()
        ]
    },

const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin'),MiniCssExtractPlugin=require('mini-css-extract-plugin'),OptimizeCssAssetsWebpackPlugin=require('optimize-css-assets-webpack-plugin'),UglifyjsWebpackPlugin=require('uglifyjs-webpack-plugin');
module.exports = {
    optimization: {
        minimize: true,
        minimizer: [
            new OptimizeCssAssetsWebpackPlugin({}),
            new UglifyjsWebpackPlugin({
                cache:true,
                parallel:true,
                sourceMap:true,
            })
        ]
    },
}

基于babel进行js编译

实现js的语法编译 语法转换:babel

babel-loader babel加载器

@babel/core 代码包 核心模块

@babel/preset-env es几转换成es几

特殊语法使用插件去处理

插件

一些高级语法,需要用到babel插件去做

eslint eslint-loader

expose-loader

86d782d61464b51a9f756e74cb3539ef.png

webpack处理图片

html中引入图片 img css中background js中动态创建图片……

处理html中的img='./assets/copy.png'

因为这里没有被依赖,所以需要用html-withimg-loader来处理

file-loader & html-withimg-loader

js中使用图片,需要把图片require / import导入进来

0fe89f57cb644f3a21fcac1bf415ffa5.png

处理图片

css和html中:

file-loader: 处理后缀名为图片后缀名的loader

html-withimg-loader: 处理html中的img

css和html中直接写相对路径,但是js中需要import/require导入进来

js中:

img.src是绝对地址,比如http 那就不需要import了

url-loader

合并 压缩 打包 部署

分目录打包

一般css js放在根目录下

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...