【问题标题】:Importing svgs with TypeScript + Webpack使用 TypeScript + Webpack 导入 svg
【发布时间】:2018-07-31 07:27:59
【问题描述】:

我有一个非常简单的 Webpack + TypeScript 设置,并且正在尝试导入 svgs。我正在使用svg-sprite-loader,如果我require() 我的svg 如下所示,它会很好地工作:

require('./assets/alert.svg')

--

但是,我更喜欢使用以下内容:

import alert from './assets/alert.svg'

这样,我得到以下错误:

TS2307: Cannot find module './assets/alert.svg'.

我的项目根目录中有一个custom.d.ts 文件(阅读后:https://webpack.js.org/guides/typescript/#importing-other-assets)。它看起来像这样:

declare module '*.svg' {
  const content: any;
  export default content;
}

我的tsconfig 看起来像:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "noImplicitAny": false,
    "sourceMap": false,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "lib": ["es6", "dom"]
  },
  "exclude": [
    "**/*.spec.ts"
  ]
}

最后,我的 webpack 设置包括:

 module: {
   rules: [
       {
           test: /\.ts$/,
           use: `awesome-typescript-loader`
       },
       {
           test: /\.html$/,
           loader: 'html-loader'
       },
       {
           test: /\.svg$/,
           loader: 'svg-sprite-loader'
       }
   ]
 }

我试图了解custom.d.ts 文件是如何发挥作用的。我的tsconfig有什么需要补充的吗?

另外,对于版本,我正在使用:

  • Webpack @ 2.5.0
  • TypeScript @ 2.4.0
  • svg-sprite-loader @ 3.6.2
  • 很棒的打字稿加载器 @ 3.1.2

【问题讨论】:

  • 您的custom.d.ts 中还有其他内容吗?
  • 不,就是这样!
  • 似乎这个设置应该可以工作。添加custom.d.ts 后出现什么编译或webpack 错误?
  • TS2307: Cannot find module './assets/alert.svg'(来自具有导入语句的文件)
  • 如果你直接运行tsc 或者只通过 webpack 运行,你会明白吗?

标签: javascript typescript webpack


【解决方案1】:

尝试添加

"files": [ 
  "custom.d.ts" 
]  

到你的 tsconfig.json

【讨论】:

    【解决方案2】:

    您可以在 tsconfig.json 中指定一个 typeRoot 指向 custom.d.ts 的位置。

    【讨论】:

    • 当然,但我不希望这种行为:“此配置文件将包括 ./typings 下的所有包,并且没有来自 ./node_modules/@types 的包” 是否可以指定 @ 987654322@ 仅包含此文件而不包含上述行为?
    猜你喜欢
    • 2018-03-21
    • 2018-03-12
    • 2017-08-02
    • 2021-06-28
    • 2017-10-28
    • 2016-12-01
    • 2016-06-14
    • 2019-10-23
    • 2015-08-07
    相关资源
    最近更新 更多