Skip to content

Instantly share code, notes, and snippets.

@viT-1
Last active August 4, 2023 08:16
Show Gist options
  • Save viT-1/238d1ad4da4d46b394851174105decea to your computer and use it in GitHub Desktop.
Save viT-1/238d1ad4da4d46b394851174105decea to your computer and use it in GitHub Desktop.
#gist-bookmark #vue

Vue3 (Composition API) не поддерживает (script setup src) традиционную схему разделения кода на esm-модули, так как принуждает прописывать код в *.vue-файлах (SFC). Соответственно тонко рулить import'ами похоже не выйдет.

Более того, если ранее с использованием vue-class-component приучали к "чистому коду" (всё что требуется импортируем явно), то теперь с такими конструкциями как defineProps вновь идёт откат к использованию окружения.

Too much magic!

Workaround: SFC.vue (non setup, js transpiled by webpack etc. compilers):

<template>...</template>
<script>
import { defineComponent } from 'vue';
import { opts } from './SomeComponent';

// export default only: https://github.com/vuejs/vue-loader/issues/1234#issuecomment-380222855
export default defineComponent(opts);
</script>

SomeComponent.js:

import { reactive } from 'vue';

const opts = {
// use props as optionsAPI, not defineProps
    props: {
        params: Object,
    },
    setup (props) {
        const items = reactive(props.params.items);

        // "computed"
        return {
            items,
        };
    }
}

export { opts };
@viT-1
Copy link
Author

viT-1 commented Aug 4, 2023

Промежуточная конфигурация между options API и setup.

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