1 Star 0 Fork 0

郭二维/自动导入vue3函数loader

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
index.js 2.77 KB
一键复制 编辑 原始数据 按行查看 历史
郭二维 提交于 2022-01-18 15:17 +08:00 . init
const compiler_sfc_1 = require("vue/compiler-sfc")
const { parse } = require("@babel/parser")
const traverse = require("@babel/traverse").default
const VueFuncNames = 'BaseTransition,Comment,EffectScope,Fragment,KeepAlive,ReactiveEffect,Static,Suspense,Teleport,Text,Transition,TransitionGroup,VueElement,callWithAsyncErrorHandling,callWithErrorHandling,camelize,capitalize,cloneVNode,compatUtils,compile$1 as compile,computed$1 as computed,createApp,createBlock,createCommentVNode,createElementBlock,createBaseVNode as createElementVNode,createHydrationRenderer,createPropsRestProxy,createRenderer,createSSRApp,createSlots,createStaticVNode,createTextVNode,createVNode,customRef,defineAsyncComponent,defineComponent,defineCustomElement,defineEmits,defineExpose,defineProps,defineSSRCustomElement,devtools,effect,effectScope,getCurrentInstance,getCurrentScope,getTransitionRawChildren,guardReactiveProps,h,handleError,hydrate,initCustomFormatter,initDirectivesForSSR,inject,isMemoSame,isProxy,isReactive,isReadonly,isRef,isRuntimeOnly,isVNode,markRaw,mergeDefaults,mergeProps,nextTick,normalizeClass,normalizeProps,normalizeStyle,onActivated,onBeforeMount,onBeforeUnmount,onBeforeUpdate,onDeactivated,onErrorCaptured,onMounted,onRenderTracked,onRenderTriggered,onScopeDispose,onServerPrefetch,onUnmounted,onUpdated,openBlock,popScopeId,provide,proxyRefs,pushScopeId,queuePostFlushCb,reactive,readonly,ref,registerRuntimeCompiler,render,renderList,renderSlot,resolveComponent,resolveDirective,resolveDynamicComponent,resolveFilter,resolveTransitionHooks,setBlockTracking,setDevtoolsHook,setTransitionHooks,shallowReactive,shallowReadonly,shallowRef,ssrContextKey,ssrUtils,stop,toDisplayString,toHandlerKey,toHandlers,toRaw,toRef,toRefs,transformVNodeArgs,triggerRef,unref,useAttrs,useCssModule,useCssVars,useSSRContext,useSlots,useTransitionState,vModelCheckbox,vModelDynamic,vModelRadio,vModelSelect,vModelText,vShow,version,warn$1 as warn,watch,watchEffect,watchPostEffect,watchSyncEffect,withAsyncContext,withCtx,withDefaults,withDirectives,withKeys,withMemo,withModifiers,withScopeId'
const Vue = new Set(VueFuncNames.split(','));
function loader (source) {
const { descriptor, errors } = (0, compiler_sfc_1.parse)(source, {});
const { script, scriptSetup } = descriptor;
let scriptCode = script || scriptSetup;
if (scriptCode) {
let content = scriptCode.content;
const ast = parse(content, { sourceType: "module" });
let usedVue = new Set();
traverse(ast, {
Identifier: item => {
if (Vue.has(item.node.name)) {
usedVue.add(item.node.name)
}
}
});
let vueImport = `\nimport { ${[...usedVue].join(', ')} } from "vue";`
let newContent = vueImport + content;
source = source.replace(content, newContent);
}
return source;
}
exports.default = loader;
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/guoweijun/auto-import-vue3-loader.git
git@gitee.com:guoweijun/auto-import-vue3-loader.git
guoweijun
auto-import-vue3-loader
自动导入vue3函数loader
master

搜索帮助