前端工程化之:webpack1-7(入口和出口)

news2024/11/18 21:33:41

前置知识

 node 环境下 "./" 代表的意思:

  1. 模块化代码中,比如 require("./") ,表示当前 js 文件所在的目录。
  2. 在路径处理中, "./" 表示 node 运行目录。
  3. __dirname:所有情况下,都表示当前运行的 js 文件 所在的目录,它是一个绝对路径。

 node 中的 path.resolve() 用法:

var path = require("path") // 导出一个对象
var result = path.resolve(__dirname,"src")
console.log(result) // 当前js文件所在目录的src文件夹

一、入口和出口

出口:这里的出口是针对资源列表的文件名或路径的配置。出口通过 output 进行配置。

入口:入口真正配置的是 chunk 。入口通过 entry 进行配置。

1.出口的静态规则

出口文件配置常用属性有 filename path

  •  filename :配置的合并的 js 文件的规则。
  •  path :表示资源放置的文件夹路径,必须是一个绝对路径,默认为 dist

  webpack.config.js

// 该对象提供了大量路径处理的函数
var path = require("path");

module.exports = {
  mode: "development", // 打包环境,可以不写
  entry: "./src/index.js", // 入口文件
  output: {
    filename: "scripts/main.js", // 配置的合并的js文件的规则,也可以写成子文件夹形式,例:"scripts/main.js",生成的文件就存放在target/scripts目录下
    path: path.resolve(__dirname, "target"), // 表示资源放置的文件夹路径,必须配置一个绝对路径,默认是dist
  },
  devtool: "source-map", // 默认为eval,配置为eval时,浏览器报错提醒在源代码中
  watch: true, // 监听文件变化,自动打包
};

打包后生成的项目目录:

 2.入口文件配置

规则: 

  •  name chunkname
  •  hash :总的资源 hash ,通常用于解决缓存问题。浏览器访问 js 文件有缓存,再次运行时不会重新访问,导致代码没有及时更新,所以要用 hash 作为文件名。
  •  chunkhash :使用 chunkhash
  •  id :使用 chunkid ,不推荐,开发环境是名字,生产环境是数字。

 默认情况下,入口配置如下, main chunk 的名称,后面是 chunk 对应的是入口模块:

entry: {
    main: "./src/index.js"  // 属性名:chunk的名称;属性值:入口模块(启动模块)
 },

 name 配置多个入口文件时,需要将出口 js 文件进行配置,用 chunkname 代替出口文件名称。

var path = require("path");

module.exports = {
  mode: "development", // 打包环境,可以不写
  entry: {
    main: "./src/index.js", // 属性名:chunk的名称,属性值:入口模块(启动模块)
    a: "./src/a.js",
  },
  output: {
    filename: "[name].js", // 配置的合并的js文件的规则
    path: path.resolve(__dirname, "target"), // 表示资源放置的文件夹路径
  },
  devtool: "source-map",
  watch: true,
};

 打包后生成的项目目录:

 

 hash

当文件内容发生改变会生成新的 hash 。 

var path = require("path");

module.exports = {
  mode: "development", // 打包环境,可以不写
  entry: {
    main: "./src/index.js", // 属性名:chunk的名称,属性值:入口模块(启动模块)
    a: "./src/a.js",
  },
  output: {
    filename: "[name].[hash].js", // 配置的合并的js文件的规则,hash:5 代表取5位
    path: path.resolve(__dirname, "target"),
  },
};

 打包后生成的项目目录:

 chunkhash

使用 chunkhash 作为出口文件规则的好处是,当文件内容发生改变时,只会影响该 chunk 的出口,生成新的 js 文件,不会影响其他 chunk

var path = require("path");

module.exports = {
  mode: "development", // 打包环境,可以不写
  entry: {
    main: "./src/index.js", // 属性名:chunk的名称,属性值:入口模块(启动模块)
    a: "./src/a.js",
  },
  output: {
    filename: "[name].[chunkhash:5].js", // 配置的合并的js文件的规则
    path: path.resolve(__dirname, "target"),
  },
};

 打包后生成的项目目录:

a.js 文件内容发生改变时,只会生成新的文件替换 a.200558.js 文件, main.db224.js 文件不会改变。

当一个 chunk 配置两个启动模块时,会按顺序先后运行这两个模块。

var path = require("path");

module.exports = {
  mode: "development", // 打包环境,可以不写
  entry: {
    main: "./src/index.js", // 属性名:chunk的名称,属性值:入口模块(启动模块)
    a: ["./src/a.js", "./src/index.js"], // 启动模块有两个
  },
  output: {
    filename: "[name].[chunkhash:5].js", // 配置的合并的js文件的规则
    path: path.resolve(__dirname, "target"),
  },
};

二、最佳实践 

场景一:一个页面一个 js 

 pageA ==> JS 

 pageB ==> JS 

 pageC ==> JS 

源码结构:

|—— src
    |—— pageA   页面A的代码目录
        |—— index.js 页面A的启动模块
        |—— ...
    |—— pageB   页面B的代码目录
        |—— index.js 页面B的启动模块
        |—— ...
    |—— pageC   页面C的代码目录
        |—— main1.js 页面C的启动模块1 例如:主功能
        |—— main2.js 页面C的启动模块2 例如:实现访问统计的额外功能
        |—— ...
    |—— common  公共代码目录
        |—— ...

 webpack 配置:

module.exports = {
    entry:{
        pageA: "./src/pageA/index.js",
        pageB: "./src/pageB/index.js",
        pageC: ["./src/pageC/main1.js", "./src/pageC/main2.js"]
    },
    output:{
        filename:"[name].[chunkhash:5].js"
    }
}

这种方式适用于页面之间的功能差异巨大、公共代码较少的情况,这种情况下打包出来的最终代码不会有太多重复。

场景二:一个页面多个 js 

pageA ==> JS1

pageA ==> JS2

pageB ==> JS1

pageB ==> JS3

源码结构:

|—— src
    |—— pageA   页面A的代码目录
        |—— index.js 页面A的启动模块
        |—— ...
    |—— pageB   页面B的代码目录
        |—— index.js 页面B的启动模块
        |—— ...
    |—— statistics   用于统计访问人数功能目录
        |—— index.js 启动模块
        |—— ...
    |—— common  公共代码目录
        |—— ...

 webpack 配置:

module.exports = {
    entry:{
        pageA: "./src/pageA/index.js",
        pageB: "./src/pageB/index.js",
        statistics: "./src/statistics/index.js"
    },
    output:{
        filename:"[name].[chunkhash:5].js"
    }
}

这种方式适用于页面之间有一些独立、相同的功能,专门使用一个 chunk 抽离这部分 JS 有利于浏览器更好的缓存这部分内容。 

场景三:单页应用 

所谓单页应用,是指整个网站(或网站的某一个功能块)只有一个页面,页面中的内容全部靠 JS 创建和控制。 vue react 都是实现单页应用的利器。

源码结构:

|—— src
    |—— subFunc   子功能目录
        |—— ...
    |—— subFunc   子功能目录
        |—— ...
    |—— common  公共代码目录
        |—— ...
    |—— index.js

  webpack 配置:

module.exports = {
    entry: "./src/index.js",
    output:{
        filename:"index.[hash:5].js"
    }
}

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

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

相关文章

Python tkinter (8) ——Spinbox控件

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 Python tkinter (5) 选项按钮与复选框 Pyt…

数据结构【图的遍历】

数据结构之图 图的类型定义和存储结构图的遍历遍历的定义图的特点图常用的遍历深度优先搜索 DFS(DepthFirstSearch)算法实现算法效率分析 广度优先搜索 BFS(BreadthFirstSearch)算法实现算法效率分析 DFS与BFS算法效率比较 图的类…

iOS_Xcode_LLDB调试常用命令

文章目录 结构常用命令:1、流程控制:2、常用命令3、进程信息:4、寄存器:register5、镜像:image6、内存:memory7、符号断点:breakpoint8、内存断点:watchpoint9、Tips: 结…

【HarmonyOS应用开发】开发介绍 DevEco Studio安装与使用(一)

内容比较长,干货满满,全是实战操作内容,希望耐心观看,如果对你有所帮助,请点个赞! 官方文档:https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667303102887820 访…

华为OD-华为机试精讲500篇系列文章目录介绍(持续补充ing)

目录 背景介绍 什么是华为OD? OD现状 OD趋势 华为OD机考刷题攻略 1、刷题资料:投递岗位通过筛选后提供 2、注意事项: 真题代码目录 背景介绍 经济下行的这几年,每个人都感同身受,如何让自己在芸芸众生中脱颖而…

ubuntu中的rsyslog

目录 1. rsyslog简介 2. 查看/var/log 3. syslog的配置文件 3.1 /etc/rsyslog.d/50-default.conf 3.2 /etc/rsyslog.conf 4. 如何写入syslog 4.1 C语言 4.2 shell 4.3 内核输出 5. syslog.1和syslog.2.gz等文件是如何生成 6. logrotate是如何被执行 7. 如何限制sys…

linux 运行vue项目

1:在本地电脑 项目跟目录 执行 npm run build 在根目录生成文件夹 dist 2:复制dist 到linux 上 /usr/vuespace/ledger-web/dist 3: 配置nginx server {listen 443 ssl;server_name tz.i569.cn; #填写绑定证书的域名ssl_certificate /etc/nginx/myconf…

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到,芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册,我只截出重点部分 总结:数据在上升沿写出,下降沿读入,…

赚钱的雏形,是跑通最小闭环!

没赚钱本事,就专心打磨武器! 很多人有一个错误的认知,就是做项目一定是新的,一定是有创新在里面,但其实赚钱的开始,一定是复制现有的项目。 现有的项目,可以确保他有市场,能够跑通&a…

Ps:段落面板

Ps菜单:窗口/段落 Window/Paragraph Ps菜单:文字/面板/段落面板 Type/Panels/Paragraph Panel 对于“点文本”,默认一行为一个段落。每按一次回车键,就多出一个段落。 对于“段落文本”,一段可能有多行,具体…

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

目 录 项目搭建步骤确定node版本使用Vite创建Vue3项目规范目录结构配置环境修改Vite配置文件集成路由工具Vue Router集成状态管理工具Pinia集成CSS预编译器Sassvite-plugin-svg-icons图标组件集成UI框架Element Plus集成HTTP 请求工具 Axios 项目代码规范集成ESLint配置集成Pre…

动手学深度学习(一)深度学习介绍1

目录 一、引言 1.日常生活中的机器学习: 2.机器学习中的关键组件: 2.1 数据: 2.2 模型: 2.3 目标函数: 2.4 优化算法: 3. 各种机器学习问题: 3.1 监督学习: 3.1.1 回归&…

qemu + vscode图形化调试linux kernel

一、背景 使用命令行连接gdb 在调试时,虽然可以通过tui enable 显示源码,但还是存在设置断点麻烦(需要对着源码设置),terminal显示代码不方便,不利于我们学习;另外在gdb 下p命令显示结构体内容…

Vue Router 简介

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介Vue Router 简介主要特性:安装和基本用法: ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的…

CSRF靶场练习

简述:CSRF漏洞实际很少;条件限制很多;局限性很大;实验仅供参考,熟悉csrf概念和攻击原理即可 Pikachu靶场 CSRF GET 登录用户vince的账户可以看到用户的相关信息; 点击修改个人信息,发现数据包…

基于springboot+layui实现的旅游信息管理系统源码+数据库,可以查看旅游路线、飞机火车的班次

travel 介绍 旅游信息管理系统,系统架构:springbootlayui 系统截图 ) 技术选型 技术版本说明Spring Boot2.1.6MVC核心框架Spring Security oauth22.1.5认证和授权框架MyBatis3.5.0ORM框架MyBatisPlus3.1.0基于mybatis,使用lambda表达式的…

TensorFlow2实战-系列教程6:迁移学习实战

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、迁移学习 用已经训练好模型的权重参数当做自己任务的模型权重初始化一般全连接层需…

读AI3.0笔记08_自然语言

1. 人工智能研究的惯用的套路 1.1. 定义一个在细分领域中比较有用的任务 1.2. 收集一个大型数据集来测试机器在该任务上的性能 1.3. 对人类在该数据集上完成任务的能力进行一个有限的度量 1.4. 建立一场竞赛使得人工智能系统可以在该数据集上互相竞争 1.5. 直到最终达到或…

内存储器之只读存储器(ROM),随机存取存储器(RAM)和Cache详解

内存储器 计算机中的存储器分为内存和外存两大类。 内存的存取速度快而容量相对较小,它与CPU直接相连,用来存放等待CPU运行的程序和处理的数据;外存的速度较慢而容量相对很大,它与CPU并不直接连接,用于永久性地存放计…

网络安全04-sql注入靶场第一关

目录 一、环境准备 1.1我们进入第一关也如图: ​编辑 二、正式开始第一关讲述 2.1很明显它让我们在标签上输入一个ID,那我们就输入在链接后面加?id1 ​编辑 2.2链接后面加个单引号()查看返回的内容,127.0.0.1/sqli/less-1/?id1,id1 …