svelte 的 npm 构建错误:插件打字稿:@rollup/plugin-typescript TS2307:找不到模块“X”或其相应的类型声明

问题描述 投票:0回答:2

我正在尝试构建一个简洁的组件库。我尝试用以下方法构建它:

npm build

我收到错误消息:

Plugin typescript: @rollup/plugin-typescript TS2307: Cannot find module './components/MyComponent.svelte' or its corresponding type declarations.

我要导出的组件在index.tsx中:

export { default as MyComponent } from "./components/MyComponent.svelte";

我的 tsconfig:

{
  "extends": "@tsconfig/svelte/tsconfig.json",
   "include": ["src/**/*"],
  "exclude": ["node_modules/*", "__sapper__/*", "public/*"],
  "compilerOptions": {
    "target": "es2016",
    "module": "esnext",
    "outDir": "dist",
    "strict": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "declaration": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "importsNotUsedAsValues": "remove"
}

我的 rollup.config.js:

import svelte from 'rollup-plugin-svelte';
import resolve from 'rollup-plugin-node-resolve';
import postcss from 'rollup-plugin-postcss';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import json from '@rollup/plugin-json';
import autoPreprocess from 'svelte-preprocess';
import typescript from '@rollup/plugin-typescript';
import nodeResolve from '@rollup/plugin-node-resolve';

const pkg = require('./package.json');

export default {
  input: 'src/index.tsx',
  output: [
    {
      file: pkg.main,
      format: 'cjs',
      sourcemap: false,
    },
    {
      file: pkg.module,
      format: 'esm',
      sourcemap: false,
    },
  ],
  plugins: [
    json({ compact: true }),
    svelte({
      preprocess: autoPreprocess(),
    }),
    resolve(),
    nodeResolve(),
    typescript({ sourceMap: true, rootDir: './src' }),
    peerDepsExternal(),
    postcss({
      extensions: ['.css'],
    }),
  ],
};

有人遇到过这样的问题吗?预先感谢!

npm build components svelte tsconfig
2个回答
4
投票

您可能必须添加这样的类型声明:

import type { SvelteComponentTyped } from 'svelte';

declare module '*.svelte' {
    export default SvelteComponentTyped;
}

svelte
包还通过
svelte/types/runtime/ambient.d.ts
提供类似的东西,尽管根据配置它可能对
tsc
不可见。

也许您还可以通过

tsconfig.json
以某种方式包含此文件。


0
投票

基于 brunnerh 的回答,如果你

import 'svelte';

我相信它从node_modules/svelte导入所有环境声明d.ts。为我工作

© www.soinside.com 2019 - 2024. All rights reserved.