semi-prefix-loader.ts 764 B

123456789101112131415161718192021
  1. import loaderUtils from 'loader-utils';
  2. import { parse } from '@babel/parser';
  3. import traverse from '@babel/traverse';
  4. import generate from '@babel/generator';
  5. export default function semiPrefixLoader(source: string) {
  6. const query = loaderUtils.getOptions ? loaderUtils.getOptions(this) : loaderUtils.parseQuery(this.query);
  7. const ast = parse(source, {
  8. sourceType: 'module'
  9. });
  10. traverse(ast, {
  11. VariableDeclarator(path) {
  12. const { node } = path;
  13. const replacerKeys = Object.keys(query.replacers);
  14. if (replacerKeys.includes((node.id as any).name)) {
  15. (node.init as any).value = query.replacers[(node.id as any).name];
  16. }
  17. }
  18. });
  19. return generate(ast).code;
  20. }