webpack怎么配置单页面或者多页面项目?

单页直接在entry中指定单页面的入口文件即可,对于多页面来说,如果页面之间有依赖关系可以考虑将entry的值改成一个数组,数组中的每一项是入口文件的地址,并且通过dependOn配置多个入口的依赖关系,一般的,我们也可以直接在entry中配置多个入口文件的键值对

1、单页面

举个例子 => 你有这样一个项目架构

├── config
│    ├── webpack.config.js //webpack配置文件
├── src
│  └── view //页面部分
│     ├── router //项目的路由
│    ├── reducer //项目的redux仓库
│    └── app.js //项目的入口文件
├── public
│   └── index.html //入口文件最后注入到的html
└── package.json //依赖的版本信息及运行项目的信息
 

入口(entry)
entry可以接收多种类型的值,字符串、数组、对象。简单来说entry包含的值代表着一个react项目的根js文件(也就是create-react-app脚手架创建的项目当中的app.js文件)

相对来说对象形式是扩展性最大,可以包含多入口的js文件,也可以定义入口文件的name


//webpack.config.js
module.exports = {
    entry: {
        app: './src/index.js', //想要的入口文件名称 : 入口文件路径
    }
}


!!! 请注意入口路径(这个相对路径不是于当前文件来说的,目前的感觉是这个相对路径是相对于webpack.config.js被执行的路径来说的)

webpack模块解析当中有对于相对路径写法解析的解释 以及
这里贴一下我的package.json中起项目的部分


这是我目前对于为什么在webpack.config.js当中仍然可以使用./src/index.js来搜寻入口文件的原因 => 否则./src/index.js的路径应该指向的是config当中

出口(output)


webpack中对于出口的最低要求是对象类型的值,并且对象当中有一个filename来表示构建完成之后输出的文件的名字.

//webpack.config.js
module.exports = {
    output: {
        filename: 'app', //filename : 最终构建好的文件的名称
    }
}



但是你一想,哎呀我entry中已经写上了我想要的出口文件的名称,这里再重复一下不是吃饱了吗,那么你可以用下面这种方式节省体力

//webpack.config.js
module.exports = {
    output: {
        filename: '[name].js', // name这里填入的值就是你在entry以对象形式创建的属性名
    }
}



下面是output的其他属性(以后用到回来补充)

//webpack.config.js
module.exports = {
    output: {
        filename: '[name].js', // name这里填入的值就是你在entry以对象形式创建的属性名
        path: __dirname + '/dist', //path: 你构建好后的文件存放的路径及文件夹名称
        //__dirname是当前文件的所在文件夹的绝对路径 => 如果你想构建在别的地方可以结合着path.join()的方式 => path.join(__dirname, '..', 'dist')这样就会将dist文件夹构建在项目的根目录下而不是构建在config文件夹当中
    }
}



转换规则loader(module)
下面是一个例子 => 这些转换loader就是帮助在构建的时候将浏览器不能支持的es的新语法或者scss等进行转义
https://www.webpackjs.com/loaders

module: {
     rules: [
         {
             test: /\.js$/, //目标文件
             exclude: /node_modules/, //排除的文件
             use: [ //object[] => object是loader配置项,可以包含多个转换规则(webpack中的解释是多个loader会从右到左(或从下到上)地取值)
                 {
                     loader: 'babel-loader',  //babel不陌生吧,最初用来将js中的es6的语法进行转换
                     options: { //可以包含对应loader的配置项
                         presets: ['@babel/preset-react'], //如果没有记错的话这里应该是配置loader对应的解析器 
                         //https://babeljs.io/docs/en/presets
                     },
                 },
             ],
         },
     ],
}
 



像ts、scss、(png、jpg)这样的文件后缀都可以通过配置相应的loader进行辅助编译

插件(plugins)
webpack给出的解释: 插件的目的在于解决 loader 无法实现的其他事
用法: 由于插件可以携带参数/选项,你必须在 webpack 配置中,向 plugins 属性传入一个 new 实例

module.export = {
    plugins: [new HtmlWebpackPlugin({ template: './public/index.html' })] // (new 构造函数)[]
    //因为接收的是new 构造函数 => 因此可以传入一些满足构造函数要求的参数进去
}
//到这里为止基本就实现了本文的第一张图片中(当然你肯定要启动webpack的配置文件 => 第二张图片)
<script type="text/javascript" src="/app.js"></script>
 

解析(resolve)
resolve : 可以设置一些模块如何被解析

module.export = {
    resolve: {
         alias: {
            '@': path.resolve(__dirname, '..', 'src'), 
            //或者这样写 '@': '/src' => webpack默认会将相对路径与上下文路径进行拼接 => 上下文路径默认就是node运行是的路径 => 对于我来说就是E:node\前端项目\src
        },
        extensions: ['.js', '.json', '.ts', '.tsx'], //告诉webpack你引入的文件要寻找哪些后缀的 => 简单来说就是你../index但没有说明是什么后缀的文件(你不设置这里的话好像只会找后缀为js的文件)。
    }
}

对于这个配置项还有很多


      2.多页面配置

同样有一个这样的项目:

├── config
│	├── webpack.config.js //webpack配置文件
├── src
│  	└── view
│ 	├── router
│	├── reducer
│	└── entry //多项目所有的入口文件
│		└── user.js
│		├── controller.js
│		└── sign.js
├── public //入口文件最后注入到的html
│   └── user.html 
│	├── controller.html
│	└── sign.html
└── package.json //依赖的版本信息及运行项目的信息

webpakck的配置:

//webpack的配置文件
const app = (function(){const pageModule = ['user', 'controller', 'sign'];const appEntry = pageModule.reducer((pv, cv) => {pv[cv] = `./src/entry/${cv}.js`;return pv;}, {})const appHtml = pageModule.reducer((pv, cv) => {const htmlOption = {template: `./public/${cv}.html`  //当然new HtmlWebpackPlugin可以接收的参数也不止这一个chunk: [cv], //当前html页面要包含的js文件}pv.push(new HtmlWebpackPlugin(htmlOption))return pv}, [])return {appEntry,appHtml}
})()
module.exports = {entry : app.appEntry, //入口文件的名字与读取的文件位置设置完成output: {filename: '[name].js',path: path.join(__dirname, '..', '/dist'),}plugins: app.appHtml,rules: {}, //解析规则devServer: {historyApiFallback: {rewrites: [{from: /\/rn\/.*$/, to: '/index.html'}]// 可以接收一个数组 => 这一部分紧跟在后面//这个配置项是支持多页面构建的重要部分}proxy: {'/api': {target: 'http://localhost:3001',pathRewrite: { '^/api': '' },},},},
}

当然配置了以后还有更多的一些类似rewite的配置可以参考如下:

webpack单页面项目与多页面项目学习搭建_webpack 链接页面-CSDN博客

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

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

相关文章

OTTO、亚马逊、Temu卖家如何运用测评补单来提高购买率?

在跨境电商的广阔舞台上&#xff0c;测评补单无疑是一股不可或缺的强劲动力。商家们深知&#xff0c;通过补单这一手段&#xff0c;能够快速为产品注入活力&#xff0c;使销量迅猛攀升&#xff0c;评论如潮涌至&#xff0c;进而在激烈的竞争中脱颖而出&#xff0c;勇攀销量之巅…

绘画新手必备!六款免费易用的绘图软件推荐

在当今的数字世界里有各种各样的设计创作工具&#xff0c;那么问题来了我们应该如何在众多免费绘图软件中选择呢&#xff1f;为了回答这个问题&#xff0c;我们将在本文中介绍和测评六个领先的绘图软件。每一个都有自己独特的特点和优势&#xff0c;适合不同的需求和用户。以下…

香港优才计划是什么?一文说明白2024香港优才政策、申请条件、流程及利弊

香港优才计划是拿香港身份比较热门的方式之一&#xff0c;对很多想要保留生活重心在内地&#xff0c;但是又需要香港身份为子女规划教育升学的人来说&#xff0c;申请香港优才计划是获取香港身份再好不过的方式。 我们刚开始了解香港优才计划可能会有各种各样的担心&#xff0…

Terraform安装+部署Azure Resource笔记

安装 下载 Terraform&#xff1a; 首先&#xff0c;访问 官方 Terraform 网站。找到适用于 Windows 的 Terraform 包&#xff0c;并下载 zip 文件。解压 Terraform 包&#xff1a; 将下载的 zip 文件解压到一个新文件夹中&#xff0c;命名为 “Terraform”。可以选择任何位置作…

IDC最新报告:预计到2027年全球数字化转型支出将近4万亿美元

根据国际数据公司&#xff08;IDC&#xff09;5月30日发布的《全球数字化转型支出指南》&#xff0c;预计到2027年全球数字化转型&#xff08;DX&#xff09;支出将接近4万亿美元。在人工智能&#xff08;AI&#xff09;和生成式人工智能&#xff08;Generative AI&#xff09;…

手机自动化测试笔记:1.appium的安装与使用

建议先安装前置的程序&#xff0c;同时建议使用anconda进行环境管理。 参考1&#xff1a; 深度学习笔记&#xff1a;1.anaconda安装-CSDN博客https://blog.csdn.net/weixin_42771529/article/details/139434840 参考2&#xff1a; 笔记&#xff1a;如何在pycharm中使用anaco…

EyeGlassesGAN——通过消除人脸所带的眼镜以提高人脸识别的精度

0. 引言 从人脸图像中自动去除眼镜的框架是一个具有挑战性的问题&#xff0c;因为它涉及到精确地识别和处理图像中的眼镜以及相关的眩光和有色镜片。以下是该论文可能提出的一些关键点&#xff1a; &#xff08;1&#xff09;. 学习框架&#xff1a; 数据集构建&#xff1a;…

深入浅出mysql海量数据批量更新插入、批量查询

1. mysql的批量写 mysql 批量插入可以用下面这种&#xff0c;在values 之后跟上各种多个值列表。但这种写法可能导致sql长度超长、锁超时等问题。 insert into (field1,field1,field1,) values (value01,value02,value03),(value11,value12,value13),(value21,value22,value2…

力扣1493.删掉一个元素以后全为1

力扣1493.删掉一个元素以后全为1 单调队列&#xff1a;找到一个最多1个0的子数组 最终结果为该子数组长度-1 特判如果数组全0&#xff0c;return 0 class Solution {public:int longestSubarray(vector<int>& nums) {int res0,sum0;for(int i0,j0;i<nums.size(…

Kotlin 异常处理

文章目录 什么是异常抛出异常通过异常信息解决异常捕获异常 什么是异常 我们在运行程序时&#xff0c;如果代码出现了语法问题或逻辑问题&#xff0c;会导致程序编译失败或退出&#xff0c;称为异常。运行结果会给出一个一长串的红色字&#xff0c;通常会给出异常信息&#xf…

使用springboot+vue实现阿里云oss上传

一、前言 我们后端开发中&#xff0c;时常需要用到文件上传的功能&#xff0c;无非是保存到服务器本地或者如阿里云、七牛云这种云存储的方案。本篇介绍一种使用后台springboot结合前端vue实现阿里云oss上传的功能。 二、实现过程 前端实现一个通用的上传组件UploadFile &l…

可以通过其瞳孔判断AI生成的人脸数据是否可靠

概述 我们都知道&#xff0c;GANs的发展使得生成相互之间无法区分的人脸图像成为可能。虽然这项技术在发展&#xff0c;但也有弊端&#xff0c;比如出现了用生成的人脸作为资料图片的虚假社交媒体账户。因此&#xff0c;随着GANs的发展&#xff0c;使用深度学习模型检测生成的…

python中有时使用pip安装库而有时又使用conda安装库,到底应该使用哪个管理工具进行库的安装呀?

决定使用conda还是pip来安装Python库主要基于以下几个因素&#xff1a; 库的可用性&#xff1a; Conda&#xff1a;如果你要安装的库在Anaconda的默认频道或conda-forge等其他Conda频道中存在&#xff0c;优先使用conda install。Conda不仅管理Python包&#xff0c;还能管理非…

Java Web学习笔记5——基础标签和样式

<!DOCTYPE html> html有很多版本&#xff0c;那我们应该告诉用户和浏览器我们现在使用的是HMTL哪个版本。 声明为HTML5文档。 字符集&#xff1a; UTF-8&#xff1a;现在最常用的字符编码方式。 GB2312&#xff1a;简体中文 BIG5&#xff1a;繁体中文、港澳台等方式…

Ubuntu的基本使用(ROS)

Ubuntu的基本使用&#xff08;ROS&#xff09; 终端常用指令 1. ls - 列出目录内容 用途&#xff1a;显示当前目录下的文件和文件夹。示例&#xff1a; ls&#xff1a;列出当前目录下的所有文件和文件夹。ls -l&#xff1a;以列表形式显示更详细的信息&#xff08;如权限、所…

ARM32开发——串口输出

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求串口数据发送串口打印实现复用功能串口发送流程&#xff08;了解&#xff09;串口的标志位关心的内容 需求 串口循环输出内容到…

大数据基础问题:在Hive中如何实现全增量统一的UDTF、内置函数、聚合、Join等计算引擎常见算子?

仁者见仁智者见智&#xff0c;每个程序员的方法都不一样&#xff0c;老的程序员和新的程序员之间的思维差距很大&#xff0c;新入公司的和老员工的代码差距也很大。 在Apache Hive中&#xff0c;实现全增量统一的用户定义表生成函数&#xff08;UDTF&#xff09;、内置函数、聚…

pdf文件怎么合并成一个文件

在现代办公环境中&#xff0c;PDF文件的使用已变得非常普遍。它们具有跨平台、易读性强的特点&#xff0c;因此被广泛应用于各种场合。然而&#xff0c;当需要处理大量的PDF文件时&#xff0c;如何有效地将它们合并成一个文件&#xff0c;成为了一个需要解决的问题。本文将详细…

【越界写null字节】ACTF2023 easy-netlink

前言 最近在矩阵杯遇到了一道 generic netlink 相关的内核题&#xff0c;然后就简单学习了一下 generic netlink 相关概念&#xff0c;然后又找了一到与 generic netlink 相关的题目。简单来说 generic netlink 相关的题目仅仅是将用户态与内核态的交互方式从传统的 ioctl 变成…

盘点学习Python常犯一些错误,你中了几个

对于刚入门的 Pythonista 在学习过程中运行代码是或多或少会遇到一些错误&#xff0c;刚开始可能看起来比较费劲。随着代码量的积累&#xff0c;熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了一些常见的 17 个错误&#xff0c;等你写出的代码不怎么出现这…