Webpack的知识要点

news2024/11/16 21:34:40

  在前端开发中,一般情况下都使用 npm 和 webpack。
  npm是一个非常流行的包管理工具,帮助开发者管理项目中使用的依赖库和工具。它可以方便地为项目安装第三方库,并在项目开发过程中进行版本控制。
  webpack是一个模块打包工具,它可以帮助我们将项目中的代码,例如 JavaScript、CSS、图片等资源进行打包和优化,从而提高应用程序的加载速度和性能。
  在项目的开发过程中,我们通常首先使用npm创建项目,并在项目中安装所需的依赖,然后使用webpack将项目的代码进行打包,并在发布前进行最终的代码优化。
  webpack官网地址

一、使用npm和webpack进行项目开发的具体构建过程:

(以Vue 2 的组件化开发为例)

   1、安装 Node.js
   Vue2 是一个基于 Node.js 环境的前端框架,需要安装 Node.js 环境。安装Node.js即安装了npm。
   2、创建项目文件夹

npm init -y

  生成package.js。
   3、安装 Webpack和webpage-cli
   在项目目录下,使用 npm 安装 Webpack,命令为:

npm install webpack webpack-cli --save-dev

   4、配置 Webpack
   在项目目录下,创建 webpack.config.js 文件,进行Webpack的配置。
   一般简易的配置为:(如入口、出口、loader等。)

const path=require('path')
const { VueLoaderPlugin } =require('vue-loader')

module.exports={
    mode:'development',
    entry:'./src/main.js',
    output:{
        filename:'bundle.js',
        path:path.resolve(__dirname,'dist')
    },
    module:{
        rules:[{
            test:/\.vue$/,
            loader:'vue-loader'
        },{
            test:/\.(jpg|jpeg|png|svg)$/,
            loader:'file-loader',
            options:{
                name:'[name].[ext]',
            }
        },{
            test:/\.css$/,
            use:['style-loader','css-loader']
        }]
    },
    resolve:{
        alias:{
            'vue':'vue/dist/vue.esm-bundler.js'
        }
    }
}

   5、安装Vue2及项目依赖
   使用npm在当前目录下安装生产环境下依赖的包。
   6、编写项目(Vue2组件)
   在 VSCode 中编写 Vue2 组件,使用 Webpack 进行打包。
   ⑴创建项目入口文件,在其中定义项目的根组件;

import Vue from 'vue'
import App from './App.vue'
new Vue({
  el: '#app',
  render: h => h(App)
})

   ⑵创建一个名为 App.vue 的组件文件,在其中定义根组件的模板和样式:

<template>
  <div>
    <p>Hello World!</p>
  </div>
</template>

<style>
  p {
    font-size: 20px;
    color: blue;
  }
</style>

   7、运行项目
   在终端中运行

npx webpack

  即可打包项目,生成 dist 目录。
   8、部署项目
   使用 Web 服务器部署生成的 dist 目录,并进行访问。

二、webpack的知识要点

  1、Entry:指示webpack以哪个文件为入口起点开始打包。
  2、Output:指示webpack打包后的资源bundles输出位置以及命名。
  3、Loader:Loader让webpack能够去处理CSS、img图片等非JavaScript文件(webpack本身只能处理Javascript/Json)
  4、Plugins:可以执行非内置的包括打包优化、压缩、定义环境中的变量等任务
  5、Mode:指示webpack使用的模式。
  6、devtool:用于编译后的代码调试。
  7、devserver:启动一个开发环境下的Web服务器用于代码调试。

  以下是一个webpack.config.js的配置:

const path=require('path')
const { VueLoaderPlugin } =require('vue-loader')
const HtmlWebpackPlugin=require('html-webpack-plugin')
const { CleanWebpackPlugin }=require('clean-webpack-plugin')
const webpack=require('webpack')

module.exports={
    mode:'development',
    entry:'./src/main.js',
    devtool:'cheap-module-eval-source-map',
    devServer:{
        port:3019,
        open:true,
        hot:true
    },
    output:{
        filename:'bundle.js',
        path:path.resolve(__dirname,'dist')
    },
    module:{
        rules:[{
            test:/\.vue$/,
            loader:'vue-loader'
        },{
            test:/\.(jpg|jpeg|png|svg)$/,
            loader:'file-loader',
            options:{
                name:'[name].[ext]',
                // limit:2048
            }
        },{
            test:/\.css$/,
            use:['style-loader','css-loader']
        },{
            test:/\.styl(us)?$/,
            use:['style-loader','css-loader','postcss-loader','stylus-loader']
        }]
    },
    plugins:[
        new VueLoaderPlugin(),
        new HtmlWebpackPlugin({
            template:'index.html'
        }),
        new CleanWebpackPlugin(),
        new webpack.HotModuleReplacementPlugin()
    ],
    resolve:{
        alias:{
            'vue':'vue/dist/vue.esm-bundler.js'
        }
    }
}

三、常用的Loader和插件
  Webpack常用的loader:
  ⑴、Babel-loader:将 ES6 转化为 ES5
  ⑵、Css-loader:加载和打包 CSS 文件
  ⑶、File-loader:打包文件,如图片,字体等
  ⑷、Raw-loader:加载原始文本文件,例如 SQL 文件
  ⑸、Url-loader:加载和转换小图片,并在超过限制时将其打包为文件
  ⑹、Postcss-loader:处理 CSS 的兼容性问题
  ⑺、Less-loader:加载和打包 Less 文件
  ⑻、Sass-loader:加载和打包 Sass 文件
  ⑼、Stylus-loader:加载和打包 Stylus 文件
  ⑽、Json-loader:加载 JSON 文件.
  Webpack 常用的插件:
  ⑴、CleanWebpackPlugin:用于清除目录中无用的文件。
  ⑵、HtmlWebpackPlugin:用于生成 HTML 文件。
  ⑶、MiniCssExtractPlugin:用于抽取 CSS 文件。
  ⑷、UglifyjsWebpackPlugin:用于压缩 JS 代码。
  ⑸、OptimizeCssAssetsWebpackPlugin:用于压缩 CSS 代码。
  ⑹、CopyWebpackPlugin:用于复制文件或文件夹。
  ⑺、BundleAnalyzerPlugin:用于分析打包后的文件体积。
  ⑻、CompressionWebpackPlugin:用于压缩输出的文件。

四、在webpack中实现自己的加载器

  ⑴、新建一个 JavaScript 文件,编写加载器的代码。

module.exports = function(source) {
    //处理
    return 处理结果;
}

  ⑵、在 webpack 配置文件中配置自己的加载器,并使用 module.rules 属性来进行配置。

        rules: [
            {
                test: /\.文件的后缀$/,
                use: [
                    path.resolve(位置, '模块名称.js')
                ]
            }

五、在webpack中实现自己的插件

  ⑴、创建一个 JavaScript 对象,并实现 apply 方法。

class 插件名称 {
    apply(compiler) { 
        //处理
    }
}

module.exports = 插件名称;

  ⑵、在 webpack 配置文件中引用这个插件并使用它。

    plugins: [
        new 插件名称()
    ]

  Webpack说简单也的确简单,就那么点内容。
  说复杂也是很复杂,因为要清楚各种Loader以及插件的细节并恰当地使用,这也不是一件容易的事情,上面我没有用到optimization,具体开发项目的时候肯定要使用。
  但关键点并不在这里,关键还是在于项目的具体构建,Webpack只不过是让你的项目开发更高效以及项目产品的输出更加高质量而已。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言深度剖析之程序环境和预处理

1.程序的翻译环境和执行环境 第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令 第二种是执行环境&#xff0c;它用于实际执行代码 2.翻译环境 分为四个阶段 预编译阶段 &#xff0c;编译&#xff0c;汇编&#xff0c;链接 程序编译过程&#xff1a;多个…

使用vue3,vite,less,flask,python从零开始学习硅谷外卖(16-40集)

严正声明&#xff01; 重要的事情说一遍&#xff0c;本文章仅供分享&#xff0c;文章和代码都是开源的&#xff0c;严禁以此牟利&#xff0c;严禁侵犯尚硅谷原作视频的任何权益&#xff0c;我知道学习编程的人各种各样的心思都有&#xff0c;但这不是你对开源社区侵权的理由&am…

iptables防火墙之SNAT与DNAT

目录 1、SNAT策略概述 1.SNAT策略的典型应用环境 2.SNAT策略的原理 3.SNAT工作原理 4.SNAT转换前提条件 5.开启SNAT命令 6.SNAT转换 2.SNAT示例 1. 配置网关服务器 2.Xshell 连接192.168.100.100 3.DNAT策略及应用 1. DNAT策略概述 2.DNAT 策略的应用 3.DNAT转换前提条件…

看完这篇 教你玩转渗透测试靶机vulnhub——Hack Me Please: 1

Vulnhub靶机Hack Me Please: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞利用③&#xff1a;获取反弹shell&#xff1a;④&#x…

how https works?https工作原理

简单一句话&#xff1a; https http TLShttps 工作原理&#xff1a;HTTPS (Hypertext Transfer Protocol Secure)是一种带有安全性的通信协议&#xff0c;用于在互联网上传输信息。它通过使用加密来保护数据的隐私和完整性。下面是 HTTPS 的工作原理&#xff1a;初始化安全会…

Camtasia2023最新版电脑视频录屏记录编辑软件

在Mac或Wind上有各种可用的视频记录和编辑软件&#xff0c;其中Camtasia被称为视频记录器和视频编辑器。录屏软件Camtasia2023到底有什么特色功能&#xff1f;本文将帮助您选择理想的选择来开始视频捕获&#xff0c;创建和编辑。Camtasia2023是Mac/win平台上一款使用非常简单的…

【JavaScript】题(牛客网)——熟练使用函数调用,超详细讲解

1 熟练使用函数调用 1.1 题目 执行以下程序&#xff0c;输出结果为 var uname "window"; var object {uname: "object",fun: function () {console.log(this.uname);return function () {console.log(this.uname);};}, };object.fun()();1.2 答案 ob…

ThingsBoard-设备配置

1、概述 从 ThingsBoard 3.2 开始,租户管理员可以使用设备配置文件为多个设备配置通用设置。每个设备在单个时间点都有一个且唯一的配置文件。 有经验的 ThingsBoard 用户会注意到设备类型已被弃用,取而代之的是设备配置文件。更新脚本将根据唯一的设备类型自动创建设备配置…

三、Java面向对象

1 . 方法 方法(method)是程序中最小的执行单元方法就是一些代码的打包 需要的时候可以直接调用方法之间是平级的关系 不能在方法里面定义方法方法不调用就不执行 方法的定义 // 方法的定义 /* [修饰符] 返回值类型 方法名称([参数 1],[参数 2]){语句A;return 返回值; } *///…

VT虚拟化框架编写

文章目录前言VT架构基础VT框架编写步骤一&#xff1a;检测VT是否开启VMM和VMVMON和VMCSVT框架编写步骤二 填充VMONVT框架编写步骤三 进入VTVT框架编写步骤四 初始化VMCSVT框架编写步骤五 初始化VMCS数据区VT框架编写步骤六 处理必要事件前言 学习VT相关的知识&#xff0c;需要…

C++11新特性

文章目录说在前面花括号{}初始化new的列表初始化STL相关容器的列表初始化相关语法格式容器列表初始化的底层原理forward_list和array与类型相关的新特性decltype左值引用和右值引用什么是左值&#xff0c;什么是右值左值和右值的本质区别右值引用如何理解右值引用std::move移动…

【软考系统架构设计师】2022下综合知识历年真题

【软考系统架构设计师】2022下综合知识历年真题 【2022下架构真题第01题&#xff1a;绿色】 01.云计算服务体系结构如下图所示&#xff0c;图中①、②、③分别与SaaS、PaaS、Iaas相对应&#xff0c;图中①、②、③应为( ) A.应用层、基础设施层、平台层 B.应用层、平台层、基础…

Linux驱动开发(一)

linux驱动学习记录 一、背景 在开始学习我的linux驱动之旅之前&#xff0c;先提一下题外话&#xff0c;我是一个c语言应用层开发工作人员&#xff0c;在工作当中往往会和硬件直接进行数据的交互&#xff0c;往往遇到数据不通的情况&#xff0c;常常难以定位&#xff0c;而恰巧…

静态分析工具Cppcheck在Windows上的使用

之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介绍过Cppcheck&#xff0c;那时还是1.x版本&#xff0c;现在已到2.x版本&#xff0c;这里再总结下。 Cppcheck是一个用于C/C代码的静态分析工具&#xff0c;源码地址为https://github.com/danmar/cppcheck …

Python之字符串精讲(上)

前言 字符串是所有编程语言在项目开发过程中涉及最多的一个内容。大部分项目的运行结果&#xff0c;都需要以文本的形式展示给客户&#xff0c;曾经有一位久经沙场的老程序员说过一句话&#xff1a;“开发一个项目&#xff0c;基本上就是在不断的处理字符串”。下面对Python中…

自命为缓存之王的Caffeine(3)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据&#xff0c;就需要定期进行清理&#xff0c;腾出存储空间。Caffeine又是怎么做的呢&#xff1f;Caffei…

SpringBoot+Vue在线小说系统

简介&#xff1a;本项目采用了基本的springbootvue设计的在线小说系统。详情请看截图。经测试&#xff0c;本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 特别说明&#xff1a;本系统设计网络爬虫&#xff0c;遵循爬虫规则&#xff0c;此项目用于学习&a…

2023关键词:挑战

未失踪人口回归… 好久不见&#xff0c;不经意间拖更2个多月。今天周末&#xff0c;外面淅淅沥沥下着小雨&#xff0c;这种窝在床上的时刻最适合写点东西了。 但是建议大家在办公或者写博客的时候尽量还是端正坐姿&#xff0c;我就是因为喜欢这样靠在床背上&#xff0c;长时间…

Spring Security 从入门到精通

前言 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Spr…

Vue3+ElementPlus+koa2实现本地图片的上传

一、示例图二、实现过程利用Koa2书写提交图片的后台接口这个模块是我写的项目中的其中一个板块——上传图片&#xff0c;这个项目的后台接口主要是是使用了后端的Koa2框架&#xff0c;前端小伙伴想要试着自己书写一些增删改查的接口可以从这个入手&#xff0c;Koa2用来了解后端…