meowtec / vite-plugin-import

Modular import plugin for vite
MIT License
14 stars 3 forks source link

feat: support modular import in development mode #4

Closed robert0609 closed 3 years ago

robert0609 commented 3 years ago

支持在开发模式下的按需加载

meowtec commented 3 years ago

不要改成总是按需加载,vite 在开发模式下 import 子模块容易出问题。

可以作为一个配置项放在 ImportPluginOptions 中:

export type ImportPluginOptions = Array<{
  [key: string]: any;
  libraryName: string;
  libraryDirectory?: string;
  camel2DashComponentName?: boolean;
+ onlyBuild: true, // 默认只在 build 模式下开启
}>;
const plugins = options.map(...).filter(Boolean) // 在 map 内判断是否需要引入 babel-plugin-import
robert0609 commented 3 years ago

不要改成总是按需加载,vite 在开发模式下 import 子模块容易出问题。

可以作为一个配置项放在 ImportPluginOptions 中:

export type ImportPluginOptions = Array<{
  [key: string]: any;
  libraryName: string;
  libraryDirectory?: string;
  camel2DashComponentName?: boolean;
+ onlyBuild: true, // 默认只在 build 模式下开启
}>;
const plugins = options.map(...).filter(Boolean) // 在 map 内判断是否需要引入 babel-plugin-import

“vite 在开发模式下 import 子模块容易出问题”,请教一下会出什么问题呢?

meowtec commented 3 years ago

@robert0609 旧版本的 Vite 如果需要引入子路径,需要手动把子路径添加到 optimizeDeps 里面,否则会出问题。

但是我试了下最新版本的 Vite,好像能根据 import 的路径自动 optimize 了,但是也是存在一些缺陷的:它只会在解析到 import 子路径后才会去做 optimize,而 optimize 的过程是异步的,完成之后页面会刷新。

所以会导致奇怪的行为: 第一次启动,打开页面后,页面会刷新几次。 执行操作,比如打开弹窗之类的,用到了某个新的(首屏渲染没用到的)子模块,页面也会刷新。

robert0609 commented 3 years ago

好,多谢。我明白了,这个我加一个选项来控制一下

meowtec commented 3 years ago

released v0.3.0