Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

import.meta.glob 添加 filter 配置 #18578

Open
4 tasks done
WangJincheng4869 opened this issue Nov 5, 2024 · 3 comments
Open
4 tasks done

import.meta.glob 添加 filter 配置 #18578

WangJincheng4869 opened this issue Nov 5, 2024 · 3 comments

Comments

@WangJincheng4869
Copy link

Description

我有一个在打包时排除某些目录的需求,这里目录中包含一些 vue 路由,我是在主 index 中使用 import.meta.glob 将其他目录的路由导入后再 push 到路由配置中。

我排除目录是使用 rollupOptions.external 排除的,但是发现由于文件被排除导致 import.meta.glob 会 import 原始内容。

图片

Suggested solution

希望提供以下功能的任意一种

  1. 当检测到导入的内容为 rollupOptions.external 排除的那么则不导入相关内容
  2. 配置项中添加 filter 配置,我可以手动配置排除导入哪些内容,可以与 rollupOptions.external 的配置类似

Alternative

No response

Additional context

No response

Validations

@bluwy
Copy link
Member

bluwy commented Nov 5, 2024

If I understand correctly, does this work for you? https://vite.dev/guide/features.html#negative-patterns

@WangJincheng4869
Copy link
Author

WangJincheng4869 commented Nov 6, 2024

If I understand correctly, does this work for you? https://vite.dev/guide/features.html#negative-patterns

我使用的就是这种方式,但是目前出现了问题,我已经提交了一个最小的复制

  1. 我排除了 components/test/.* 目录(PS:这里的详细逻辑也会读取环境变量生成正则,这里进行的简化)

图片

  1. 我在 router/index.ts 中加入动态导入代码,只要在环境变量为 test 时才会加载这些路由

图片

  1. 我在命令行中对环境变量赋值

图片

  1. 执行 build-only 后并部署到 nginx 中,会去请求 /test/router/index.ts

图片

我的目的是:build 后不要请求 /test/router/index.ts,因为我已经在 external 中排除了它。因为这是一个致命的问题,会导致部署失败,页面无法访问,因为语法并不支持。

图片

@WangJincheng4869
Copy link
Author

WangJincheng4869 commented Nov 6, 2024

If I understand correctly, does this work for you? https://vite.dev/guide/features.html#negative-patterns

如果支持 filter 方式,那么我就可以这么过滤,无需在 push 路由时过滤

let modulesRouteRecord: Record<string, any> = import.meta.glob("../components/**/router/index.ts", {
  eager: true,
  filter: (key, value) => {
    return import.meta.env.VITE_CUSTOMIZATION_MODULE === "test" && key === 'xxxx'
  }
});

当然,如果它能自动识别 external 的参数内容自动排除掉会更好,这样免去了这部分的代码。

最根本的问题应该就是在编译后的代码中出现了 import*as Yo from "../src/components/test/router/index.ts"; 导致页面无法访问

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants