首页 > 其他分享 >vite 项目批量引入文件

vite 项目批量引入文件

时间:2024-05-10 10:47:42浏览次数:31  
标签:const name 批量 modules key 引入 import vite

技术栈

[email protected][email protected]

背景

项目开发中,想要全局注册 comps 文件夹下的组件,有两种方式

1. 在 main 文件中,将组件一个个引入后注册

2. 在 comps 文件夹下,添加 index.js 引入并导出所有组件。在 main 文件中批量引入遍历注册

问题

为了 main 文件的美好观感(代码组织更好),达成代码模块话管理和更高的可维护性,自然选择了方式2

但,这样并不能一劳永逸,每次开发一个新组件都要更新 index.js,人总是懒惰的,于是有了后续操作

过程

1 require.context

在 vite 出现之前,使用 webpack 的时期,require.context  是极好用的,但 require 是 commonJS 的语法,不能在基于 ES 模块的 vite 里使用,无奈

2 fs

于是迂回试试,用 node 提供的 fs 模块,读取文件夹下的所有文件

import * as fs from 'fs'
import * as path from 'path'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename) 

未果,卡在了第一步,fileURLToPath 直接报错 Uncaught TypeError: The URL must be of scheme file

原因:

浏览器里执行时,import.meta.url 的值是 http://ip:port/path,在 node 环境里执行时,是 file:///filePath

fileURLToPath 只能接收 file 协议的 URL,返回完整的文件路径

3 import.meta.glob

vite 官方文档中提到了 import.meta.glob 函数,可以从文件系统里导入多个模块,问题解决

附1 vite 项目文件批量导入

const modules = import.meta.glob(`./*.vue`, { eager: true })  // */
const map = {}
for (let key in modules) {
    const name = 'y-' + getKebabCase(key.split('/')[1].split('.')[0])
    map[name] = modules[key].default
}
export default map

附2 wepack 项目文件批量导入

const comps = require.context('./', false, /.(vue)$/)

const modules = comps.keys().reduce((modules, name) => {
  const moduleName = name.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = comps(name)
  modules[moduleName] = value.default
  return modules
}, {})

export default modules

附3 组件注册

import Comps from './components';
const app = createApp(App)
for(const key in Comps) {
    app.component(key, Comps[key])
}

app.mount('#app')

 

标签:const,name,批量,modules,key,引入,import,vite
From: https://www.cnblogs.com/veinyin/p/18183573

相关文章

  • 批量删除WordPress文章和页面的数据库命令和从后台直接删除
    批量删除wordpress的方法有两种:1.从wp后台可以调整展示:最多999条2.选择“Bulk”--“Apply”  通过批量删除wordpress文章和页面的数据库命令的步骤:备份数据库:在执行任何数据库操作之前,务必备份您的数据库以防万一。进入数据库:使用您的数据库管理工具(例如phpMyAdmin)登......
  • 如何把多个文件(夹)向上移动1层(或多层)(在批量复制前或后进行)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 假定情况是,我要把下图里的4个文件夹内部的全部文件,合并到04的当前位置来(4个文件夹里面各有5个兔兔的图片)打开工具,切换到文件批量复制版块找到右下角的更多,点击,来设置上移的情况勾选“来源路径”向上......
  • 批量修改asp.net core 项目的解决方案的命名空间
    单个命名空间重命名:打开任何使用旧命名空间(例如:“OrchardCore”)的文件。右键点击命名空间名称,选择“重构”然后选择“重命名”。输入新的命名空间名称(例如:“SuperCore”),确保选中“预览更改”,然后点击“应用”。VisualStudio将显示所有受影响的引用,并让你确认修改。全局搜索......
  • C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u01310
    C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具VisualStudio中的操作静态库(.lib)静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,......
  • GreatSQL的sp中添加新的sp_instr引入的bug解析
    GreatSQL的sp中添加新的sp_instr引入的bug解析一、问题发现在一次开发中用到的sp需要添加新的sp_instr以满足需求,但是添加了数个sp_instr以后发现执行新的sp会发生core。注:本次使用的GreatSQL8.0.32-251、sp_head.cc的init_sp_psi_keys()代码里面添加10个新的sp_instr:void......
  • 如何批量重命名,把文件(夹)名的内容位置调整(前后移动)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z情况是这样,把“中文[数字]”的名称,改为"中文-数字"打开工具,切换到文件批量复制模块,快捷键Ctrl+5找到右下角的“重命名”按钮,打开把那些文件拖入进去,也可以用右侧的导入按钮(如果是文件夹的话,要勾选“针对......
  • uniapp开发小程序引入vant
    1.安装#通过npm安装npmi@vant/weapp-S--production#通过yarn安装yarnadd@vant/weapp--production#安装0.x版本npmivant-weapp-S--production2.引入项目首先在项目根目录创建文件夹wxcomponents,然后在其中创建vant文件夹。把node_modules......
  • mybatisplus批量插入,分批的功能
    默认分批是1000一般也就改成100-1000之间示业务而定 比较简洁的一种方式如下原代码publicBooleaninsertTasks(List<TaskInfoEntity>tasks,StringagentId){//todo分批List<AgentTaskRelationEntity>entities=tasks.stream().map((......
  • PXE高效批量网络装机
    目录1.PXE概述2.部署PXE远程安装服务(1)安装并启用TFTP服务(2)安装并启用DHCP服务(3)准备Linux内核、初始化镜像文件(4)准备PXE引导程序(5)安装FTP服务,准备CentOS7安装源(6)配置启动菜单文件(7)验证PXE网络安装3.实现Kickstart无人值守安装(1)安装tftp-serverxinetddhcpvsftpd......
  • PXE批量安装服务器
    PXEPXE的全称是prebootexecuteenvironment它其实是Intel在很久以前提出来的一项用于通过网络来引导系统的标准。允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。pxe是通过网卡引导启动1.实现的硬件条件1.BIOS支持2.网卡支持(现在基本都已......