Vue3.js和导出的命名空间

Vue3.js and exported namespace

提问人:LeXav 提问时间:9/3/2023 更新时间:9/3/2023 访问量:92

问:

我有一个代码在一个.ts文件中,我想将其导入 a.vue 文件以保持一致性。

在.ts文件中,我在导出的命名空间中有一些函数。

问题是当我将其保存在 .vue 文件中时,出现以下错误:

<script setup> cannot contain ES module exports. If you are using a previous version of <script setup>, please consult the updated RFC at https://github.com/vuejs/rfcs/pull/227

如果我删除 export 关键字,我会得到:

SyntaxError: ambiguous indirect export: ...

/path/to/file.js 的结构

<script setup lang="ts">
import { Stuffs } from "package";

export namespace myNS {
   // members here
}
</script>

/path/to/importer.js 的结构

<script setup lang="ts">

import { ref, onMounted } from "vue";
import { myNS } from "@/path/to/file.js";

//Stuffs
</script>

viteJS公司

import { fileURLToPath, URL } from "url";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

// https://vitejs.dev/config/
export default defineConfig({
  define: {
    __VUE_I18N_FULL_INSTALL__: true,
    __VUE_I18N_LEGACY_API__: false,
    __INTLIFY_PROD_DEVTOOLS__: false,
  },
  plugins: [vue()],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
});

问题:

那么我如何在此上下文中导出我的命名空间呢? 除了导出之外,我还有什么替代方案?

我需要我的函数可以在他们的文件之外访问并在 vue3 组件中调用。

谢谢

JavaScript TypeScript vue.js vuejs3

评论

0赞 Estus Flask 9/3/2023
你所谓的“一致性”似乎是一种误用。.vue 文件用于组件,请勿将其用于一般用途。 - 这不是有效的 JS,应该只在 Vue SFC 中使用<script setup lang="ts">

答:

0赞 Dimava 9/3/2023 #1

由于这个确切的原因,您无法将代码从 TS 文件移动到脚本设置中 -
您不能在脚本安装程序中使用导出

这就是使用 TS 而不是仅使用脚本设置的全部原因

脚本安装程序唯一可以导出的是整个组件的隐式默认导出

如果要导出命名空间,请使用 TS 文件

如果需要组件的命名空间,请将组件作为默认值导入,然后重新导出到命名空间中.vue

评论

0赞 LeXav 9/3/2023
好吧,那我就退后一步。我以为我可以避免多次扩展,但没有。谢谢迪马瓦
0赞 Dimava 9/3/2023
@LeXav好吧,你可以避免使用 Vue 苍蝇 ,但你绝对不希望这样
1赞 Famurewa Taiwo 9/3/2023 #2

在代码中,您尝试导出命名空间 (myNS) 并从外部包导入。不直接支持这些功能。要解决此问题,您可以考虑以下方法: 使用块:如果需要导出命名空间或使用高级 ES 模块功能,最好使用常规块而不是 .

<script lang="ts">
import { Stuffs } from "package";

export namespace myNS {
  // members here
}
</script>

评论

0赞 LeXav 9/6/2023
你的意思是除了脚本设置之外的脚本块?很好,我会尝试的,同时+1