typescript - 在 svelte 中设置 tsconfig 路径
问题描述
使用 Svelte 和 typescript,我想使用路径进行组件导入。
我有以下tsconfig.json
{
"extends": "@tsconfig/svelte/tsconfig.json",
"include": ["src/**/*"],
"main": "src/main.ts",
"exclude": ["node_modules/*", "__sapper__/*", "public/*"],
"compilerOptions": {
"baseUrl": "./",
"module": "es2020",
"target": "es2020",
"paths": {
"@src/*": ["src/*"],
"@environments/*": ["src/environments/*"]
}
}
}
现在当我做
<script lang="ts">
import Home from '@src/home/Home.svelte'
</script>
<style>
main {
width: 100%;
height: 100%;
position: relative;
}
</style>
<main>
<Home/>
</main>
一些纤细的内部文件的主点 =>
而不是我的Home.svelte
如果我这样做,它会起作用,我不import Home from './home/Home.svelte'
知道为什么。
解决方案
svelte 模板使用rollupjs作为捆绑器。它用于递归解析所有文件并将(为 Svelte 编译)转换为.js
每个浏览器都可以理解的单个文件。
所以当你想在你的中使用别名时,import
你需要告诉捆绑器它是如何处理它的。您需要在rollup.config.js
文件中声明所有别名,就像在tsconfig.json
.
要声明它们,您需要安装一个名为@rollup/plugin-alias的外部包,并在以下位置使用它rollup.config.js
:
import alias from '@rollup/plugin-alias';
import path from 'path'
const projectRootDir = path.resolve(__dirname);
export default {
...
plugins: [
...
alias({
entries: [
{
find: '@src',
replacement: path.resolve(projectRootDir, 'src')
}
]
}),
...
],
};
现在 rollupjs 能够解析所有包含@src
别名的路径。
检查此 repo以获取工作示例。
推荐阅读
- eclipse-che - 在 Kubernetes 中运行 Eclipse Che 7 beta 4
- memory - KTable/KStream 内存消耗随时间变化
- f# - 如何在 F# 上将对象声明到另一个类中?
- jquery - Jquery Dropdown Filter : Uncaught TypeError: "#ID".val is not a function
- c# - 如何使用 IdentityUser 创建两个差异表
- android - 修改Android中传入通知的声音
- javascript - 没有调用带有 ReplaySubject 的 forkJoin.subscribe
- binding.scala - 如何设置tabindex属性
- postgresql - 如何从 Kubernetes 集群直接访问 GCP 中托管的 postgres 到私有 IP
- graphviz - Plantuml 在线和本地渲染差异