Bac*_*ick 10 nuxt.js vuejs3 nuxtjs3 nuxt-module
我想从自定义 nuxt 模块添加可组合项,并在组件中使用它们而无需导入。
现在我必须使用#import,因为没有它我会收到错误(500 - useTest 未定义)。我有这样的东西,有什么想法可以实现这个目标吗?
// src/module.ts
import { fileURLToPath } from "url";
import {
defineNuxtModule,
addPlugin,
createResolver,
addComponent,
addImportsDir,
} from "@nuxt/kit";
export interface ModuleOptions {
addPlugin: boolean;
}
export default defineNuxtModule<ModuleOptions>({
meta: {
name: "my-module",
configKey: "myModule",
},
defaults: {
addPlugin: true,
},
setup(options, nuxt) {
const { resolve } = createResolver(import.meta.url);
const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url));
addImportsDir(resolve(runtimeDir, "composables"));
},
});
Run Code Online (Sandbox Code Playgroud)
// src/runtime/composables/useTest.ts
export function useTest() {
console.log("run useTest");
return {
test: () => {
console.log("run test method provided by useTest");
},
};
}
Run Code Online (Sandbox Code Playgroud)
// playground/app.vue
<template>
<div>
Nuxt module playground!
</div>
</template>
<script setup>
import { useTest } from "#imports"; // <--------- I would like remove this line
useTest();
</script>
Run Code Online (Sandbox Code Playgroud)
小智 0
有同样的问题。我不知道为什么 addImportsDir 不能按预期工作。这是我的解决方法:
export default defineNuxtModule<ModuleOptions>({
meta: {
name: "my-module",
configKey: "myModule",
},
defaults: {
addPlugin: true,
},
setup(options, nuxt) {
const { resolve } = createResolver(import.meta.url);
const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url));
// addImportsDir(resolve(runtimeDir, "composables"));
nuxt.hook('nitro:config', (nitroConfig) => {
if (!nitroConfig.imports) {
nitroConfig.imports = {
imports: [],
};
}
nitroConfig.imports.imports.push({
name: 'useTest',
as: 'useTest',
from: join(runtimeDir, 'composables/useTest'),
});
});
},
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3428 次 |
| 最近记录: |