unjs / unplugin

Unified plugin system for Vite, Rollup, Webpack, esbuild, Rolldown, and more

Home Page:https://unplugin.unjs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature]:Babel plugin support

SnowingFox opened this issue · comments

Describe the feature

In some case, like React Native devlopment, it should use babel instead of webpack, vite ..., so it's necessary to support babel plugin devlopment in unplugin.

Do you have any plan for this feature?

Additional information

  • Would you be willing to help implement this feature?

I don't feel that are the same category of plugins, how do you expect it to work?

I don't feel that are the same category of plugins, how do you expect it to work?

We don't necessarily need to be compatible with unplugin devlope system like transform, resolveId ..., we just need to provide a entry for babel plugin so that developers can resuse their logic and maintain their code in a same repository instead of creating a new repository to do some repeat thing.

Take your unplugin-auto-import repository as an example

import insertImport from './insert'

export const unplugin = createUnplugin((options: UserOptions) => {
  return {
    name: 'auto-import',
    transformInclude(id) {
      return id.endsWith('.ts')
    },
    transform(code) {
      return insertImport(code)
    },
    babel: {
      visitor: {
        Identifier(path, { opts: options, file }) {
          let { node: identifier, scope } = path;
          let { declarations } = options;

          let filename = file.opts.filename
            ? basename(file.opts.filename)
            : "";

          declarations.some(handleDeclaration, {
            path,
            identifier,
            filename,
          });
        },
        handleDeclaration(declaration) {
          insertImport(declaration);
          return true;
        }
      }
    },
  }
}
commented

@SnowingFox IMHO this is out-of-scope...

Yeah. As unplugin we certainly don't want to couple with one single parser, as there are many more to choose, or simply no parsers at all. Close as I'd consider it out-of-scope. Thanks.