webpack5 学习(六)—— 管理资源:自定义 JSON 模块 parser

2023-11-13

通过使用 自定义 parser 替代特定的 webpack loader,可以将任何 tomlyamljson5 文件作为 JSON 模块导入。

src 文件夹下创建一个 data.toml、一个 data.yaml 以及一个 data.json5 文件:

data.toml

src/data.toml文件:

title = "This is a TOML Example"

[owner]
name = "Tom"
organization = "GitHub"
bio = "This bio"
dob = 1979-05-27T07:32:00Z

data.yaml

src/data.yaml:

title: This is a YAML Example
owner:
  name: Tom
  organization: GitHub
  bio: |-
    Gitgit
    Likes tater tots and beer.
  dob: 1979-05-27T07:32:00.000Z

data.json5

src/data.json5:

{
  // comment
  title: "This is a JSON5 Example",
  owner: {
    name: "Tom Preston-Werner",
    organization: "GitHub",
    bio: "Git git is\n\
    Likes tater tots and beer.",
    dob: "1979-05-27T07:32:00.000Z"
  }
}

项目结构

在项目中添加 了上面的三个文件,此时项目结构:

  webpack-demo
  |- package.json
  |- package-lock.json
  |- webpack.config.js
  |- /dist
    |- bundle.js
    |- index.html
  |- /src
   |- data.xml
   |- data.csv
   |- data.toml
   |- data.yaml
   |- data.json5
   |- OPPOSans-B.ttf
   |- OPPOSans-H.ttf
   |- logo.png
   |- icon.png
   |- style.css
   |- index.js
  |- /node_modules

安装 tomlyamljsjson5 的 packages:

npm install toml yamljs json5 --save-dev

安装完成:
在这里插入图片描述

webpack.config.js

并在 webpack 中进行配置:

webpack.config.js:

const path = require('path')
const toml = require('toml');
const yaml = require('yamljs');
const json5 = require('json5');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset/resource'
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/i,
        type: 'asset/resource'
      },
      {
        test: /\.(csv|tsv)$/i,
        use: ['csv-loader']
      },
      {
        test: /\.xml$/i,
        use: ['xml-loader']
      },
      {
        test: /\.toml$/i,
        type: 'json',
        parser: {
          parse: toml.parse,
        }
      },
      {
        test: /\.yaml$/i,
        type: 'json',
        parser: {
          parse: yaml.parse,
        }
      },
      {
        test: /\.json5$/i,
        type: 'json',
        parser: {
          parse: json5.parse,
        }
      }
    ]
  }
}

修改src/index.js

import _ from 'lodash';
import './style.css'
import Logo from './logo.png'
import Data from './data.xml';
import Notes from './data.csv';
import toml from './data.toml';
import yaml from './data.yaml';
import json from './data.json5';

console.log('toml.title', toml.title);
console.log('toml.owner.name', toml.owner.name);

console.log('yaml.title', yaml.title);
console.log('yaml.owner.name', yaml.owner.name);

console.log('json.title', json.title);
console.log('json.owner.name', json.owner.name);

function component () {
  const element = document.createElement('div');

  // lodash 在当前 script 中使用 import 引入
  element.innerHTML = _.join(['Hello', 'webpack'], ' ');
  element.classList.add('hello');

  // 将图像添加到div中
  const myLogo = new Image();
  myLogo.src = Logo;

  element.appendChild(myLogo);

  console.log('Data', Data);

  console.log('Notes', Notes);

  return element;
}

document.body.appendChild(component());

执行 npm run build 命令:
在这里插入图片描述

然后,打开 dist/index.html,打开控制台:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack5 学习(六)—— 管理资源:自定义 JSON 模块 parser 的相关文章

随机推荐

  • 【17 > 分布式接口幂等性】1. 概述与接口重试的问题

    一 本章概述 二 接口幂等性 2 1 定义 2 2 运用场景 2 3 保证幂等性的策略有哪些 2 4 如何实现 2 5 如何操作 一 本章概述 什么是幂等性 幂等性设计的 核心思想 select updates delete insert
  • HTML的列表标签,表格标签

    前端学习经验 3 HTML 列表标签 li 此标签定义列表项目 用于有序列表 ol 和无序列表 ul 中 无序列表标签 ul 无序列表 ul 此标签定义无序列表 例 ul li 无序列表1 li li 无序列表2 li li 无序列表3 l
  • C#驱动ESP32控制机器臂

    物料清单 介绍 NET nanoFramework 是一个免费的开源平台 可以为受限嵌入式设备编写托管代码应用程序 它适用于多种类型的项目 包括物联网传感器 可穿戴设备 学术概念验证 机器人技术 业余爱好者 创客创作甚至复杂的工业设备 通过
  • 【VTK】FindPokedRenderer函数

    最近写VTK的响应程序发现鼠标响应函数最后都会有InvokeEvent函数 部分有FindPokedRenderer 对这两个函数的运行机制还不是很了解 现在具体介绍一下 1 FindPokedRenderer 作为actor的管理工具 还
  • 基于linux下的dm9000网卡移植全分析

    DM9000可以直接与ISA总线相连 也可以与大多数CPU直接相连 Mini2440采用的是dm9000直接连接CPU s3c2440 上 就像是nandflash一样直接被挂在CUP上 被挂在s3c2440的bank4上 小插曲1 s3c
  • web项目部署到某云Linux服务器的详细步骤

    一 安装xshell 和 xftp 1 xshell连接服务器 方式有几种 这里只介绍其中之一 在 某云 密钥对创建密钥对 然后会得到下载的密钥对文件 打开xshell 打开 新建 上图中的主机填某云 实例 中的 然后在xshell 用户身
  • Python3,Pandas这4种高频使用的筛选数据的方法,不得不说,确实挺好。

    Pandas数据筛选方法 1 引言 2 4种高频使用数据筛选方法 2 1 布尔索引 2 2 isin 方法 2 3 query 方法 2 4 loc 方法 3 总结 1 引言 小屌丝 鱼哥 share一下 数据筛选的方法呗 小鱼 Excel
  • 精度 vs 效率:模型越小,精度就一定越低吗?

    导语 深度学习是否朝着正确的方向发展 以下是我最近在伦敦 O Reilly AI Conference 和 DroidCon 上的两次谈话的改编 今年早些时候 NVIDIA 的研究人员发布了 MegatronLM 这是一个拥有 83 亿个参
  • 东方财富choice金融终端研究笔记

    东方财富choice金融终端研究笔记 最近在研究 东方财富choice金融终端 我就搞不懂了 他们弄这个东西是存心不让人懂的吗 说明PDF第四页 方式一 使用激活工具 适用于有图形界面 根据所用系统环境 运行接口激活工具LoginActiv
  • 第一节:Keras深度学习框架之环境搭建

    请在学习本节前阅读我们之前的预热课程 卷积神经网络的框架解读 上 BBM的开源HUB的博客 CSDN博客 卷积神经网络的框架解读 下 BBM的开源HUB的博客 CSDN博客 从本节开始 我们将进入到Keras的详细介绍和代码精读 为开始我们
  • 02-编写单个字节设备模块的驱动套路

    目录 1 单字节设备和多字节设备的区别 2 单字节设备 LED设备驱动 的驱动套路 2 1 头文件 2 2 定义设备驱动相关的变量 2 3 编写file operations 相关操作的函数 2 3 1 open函数 2 3 2 relea
  • matlab做角谱传播代码_AI

    运筹OR帷幄 转载 作者 机器之心 编者按 对python语言有所了解的人都知道Numpy这个数学处理工具包 而它在机器学习中也有很重要的地位 通过合理的使用Numpy这个工具 可以简单快速地搭建模型的数学计算流程 可以说是一把 利剑 普林
  • 阿里云:网络编程 bind:cannot assign requested address errno:99 问题

    解决方案 阿里云上的服务器代码绑定的 IP 需要时内网 IP ifconfig 查看 其他客户端连接服务器时所用的 IP 得是阿里云的外网 IP 查看实例即可 分析思路 猜想1 bind cannot assign requested ad
  • 解决“Pycharm中用Install Package 安装第三库出错”问题的经验

    1 问题描述 在PyCharm中通过Install Package 安装第三库 requests 报错了 但是可以通过终端Terminal可以安装 报错信息如图 2 问题分析及方法对策 根据我自己的经历以及网上搜寻所得 大致总结出如下原因
  • Python Selenium UI自动化测试

    1 自动化测试基础 1 1 自动化测试的定义 将人为的测试行为转化为机器自动执行的过程 1 2 自动化测试的目的 减少成本 提高测试效率 减少人为因素对测试的影响 1 3 什么项目适合做自动化测试 项目界面稳定 需求明确 项目周期长 测试脚
  • robot framework 接口自动化测试(2)get方式传递token

    之前介绍了get请求头不需要传递参数的方式 那么对于需要传入登录状态的token接口我们怎么测试呢 下面介绍一下 首先先做post的接口自动化获取到token token实时更新 所以每次调用需要token的get接口测试都需要post的t
  • postman-post格式报文接口的配置

    post格式报文接口的配置 1 新建请求 2 配置请求报文 输入接口URL authorization界面可配置授权信息 header界面可以配置请求头 body界面可以配置请求体 非作者允许 严禁转载 http接口有许多格式 post格式
  • pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何

    今天在mysql中插入大批量数据时 突然想起pymysql 还有executemany 方法 那么这两个方法到底谁快 快多少 测试环境 python3 mysql pymysql 老规矩 先上测试代码 class IN sql def in
  • [1144]Hive常用日期格式转换

    文章目录 获取当前时间 Hive中处理毫秒级别的时间戳 日期格式转换 返回日期中的年 月 日 时 分 秒 当前的周数 返回当月或当年的第一天 计算日期差值 返回结束日期减去开始日期的天数 返回开始日期startdate增加days天后的日期
  • webpack5 学习(六)—— 管理资源:自定义 JSON 模块 parser

    通过使用 自定义 parser 替代特定的 webpack loader 可以将任何 toml yaml 或 json5 文件作为 JSON 模块导入 在 src 文件夹下创建一个 data toml 一个 data yaml 以及一个 d