SvelteKit:如何通过别名(如 $routes)从组件和端点引用 /routes 文件夹?
SvelteKit: How to refer to the /routes folder from components and endpoints via alias, like $routes?
接下来是我的(简化的)项目结构:
appname
|
|__src
| |__lib
| |__routes
|
|__jsconfig.json
在 jsconfig.js 文件中,我有一个带有别名的路径键,以 $lib.
的形式指向 './src/lib' 文件夹
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$lib": ["src/lib"],
"$lib/*": ["src/lib/*"],
}
},
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}
我想以与$lib 相同的方式访问带有$routes 别名的routes 文件夹。
但是如果我在上面的 JSON 文件中添加 "$routes": ["src/routes"]
,sveltekit 无法解析以 '$routes/somefile'
开头的路径
示例:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$lib": ["src/lib"],
"$lib/*": ["src/lib/*"],
"$routes": ["src/routes"],
"$routes/*": ["src/routes/*"],
}
},
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}
endpoint.js
import { db } from '$routes/db';
我做错了什么?
您还必须告诉捆绑器在 svelte.config.js
中使用它
kit: {
vite: {
resolve: {
alias: {
$routes: path.resolve('./src/routes')
}
}
}
}
也就是说,请记住 routes 文件夹中的所有文件 除了以 _ 下划线开头的文件)都被视为路由。因此,如果您有文件 /src/routes/db.js
,用户可以转到 http://yoursite.domain/db
。
很少有任何理由从那里导入文件,如果您需要这样做,它可能不是路由或端点,可以安全地放入 lib
而不是
补充 答案。
我将 SvelteKit 与 TypeScript 一起使用,因此我将路径添加到 tsconfig.json
,如下所示:
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$routes": ["src/routes"],
"$routes/*": ["src/routes/*"]
}
}
}
然后我设置svelte.config.js
如下:
import path from 'path';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
vite:{
resolve: {
alias: {
$routes: path.resolve('./src/routes'),
}
}
},
},
};
如果你也在使用Vitest,你可以设置导出对象
在 config.kit.vite
下提供并将其导入您的 vite.config.ts
文件如下:
/// <reference types="vitest" />
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';
import { viteConfig } from './svelte.config.js';
import type { UserConfig } from 'vite';
export default defineConfig({
...(viteConfig as UserConfig),
plugins: [svelte()],
});
这样您就可以从您的 Vitest 套件中导入用于测试的路由。
接下来是我的(简化的)项目结构:
appname
|
|__src
| |__lib
| |__routes
|
|__jsconfig.json
在 jsconfig.js 文件中,我有一个带有别名的路径键,以 $lib.
的形式指向 './src/lib' 文件夹{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$lib": ["src/lib"],
"$lib/*": ["src/lib/*"],
}
},
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}
我想以与$lib 相同的方式访问带有$routes 别名的routes 文件夹。
但是如果我在上面的 JSON 文件中添加 "$routes": ["src/routes"]
,sveltekit 无法解析以 '$routes/somefile'
示例:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$lib": ["src/lib"],
"$lib/*": ["src/lib/*"],
"$routes": ["src/routes"],
"$routes/*": ["src/routes/*"],
}
},
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}
endpoint.js
import { db } from '$routes/db';
我做错了什么?
您还必须告诉捆绑器在 svelte.config.js
中使用它kit: {
vite: {
resolve: {
alias: {
$routes: path.resolve('./src/routes')
}
}
}
}
也就是说,请记住 routes 文件夹中的所有文件 除了以 _ 下划线开头的文件)都被视为路由。因此,如果您有文件 /src/routes/db.js
,用户可以转到 http://yoursite.domain/db
。
很少有任何理由从那里导入文件,如果您需要这样做,它可能不是路由或端点,可以安全地放入 lib
而不是
补充
我将 SvelteKit 与 TypeScript 一起使用,因此我将路径添加到 tsconfig.json
,如下所示:
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$routes": ["src/routes"],
"$routes/*": ["src/routes/*"]
}
}
}
然后我设置svelte.config.js
如下:
import path from 'path';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
vite:{
resolve: {
alias: {
$routes: path.resolve('./src/routes'),
}
}
},
},
};
如果你也在使用Vitest,你可以设置导出对象
在 config.kit.vite
下提供并将其导入您的 vite.config.ts
文件如下:
/// <reference types="vitest" />
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';
import { viteConfig } from './svelte.config.js';
import type { UserConfig } from 'vite';
export default defineConfig({
...(viteConfig as UserConfig),
plugins: [svelte()],
});
这样您就可以从您的 Vitest 套件中导入用于测试的路由。