Mon*_*nes 6 reactjs webpack webpack-file-loader typescript-typings
我正在尝试使用webpack和webpack-dev-server在React组件中显示图像作为项目的一部分。
到目前为止,我已经完成了以下步骤:
采取了这些步骤后,webpack编译失败并显示“找不到模块”错误:
ERROR in [at-loader] ./src/components/App.tsx:4:26
TS2307: Cannot find module '../images/kitten-header.jpg'.
Run Code Online (Sandbox Code Playgroud)
我的文件夹结构如下:
/dist
/images
kitten-header.jpg
bundle.js
bundle.js.map
/node_modules
(content ignored for brevity)
/src
/components
App.tsx
/images
kitten-header.jpg
/styles
App.less
index.tsx
index.html
package.json
tsconfig.json
webpack.config.js
Run Code Online (Sandbox Code Playgroud)
我添加到webpack.config.js的新加载器是:
test: /\.(jpe?g|gif|png|svg)$/, loader: "file-loader?name=./images/[name].[ext]"
Run Code Online (Sandbox Code Playgroud)
我已经将图像文件导入了App.tsx中,如下所示:
import kittenHeader from '../images/kitten-header.jpg';
Run Code Online (Sandbox Code Playgroud)
...并在img标签中使用了导入,如下所示:
<img src={ kittenHeader } />
Run Code Online (Sandbox Code Playgroud)
注意:提供了webpack.config.js和App.tsx的全文,直到我更接近答案并意识到它们不相关为止(请参阅更新1)。
我假设我在导入的相对路径方面犯了一些非常琐碎的错误。可以想象,我尝试了多种选择。
谁能提供一些见识?
作为参考,由于我不断遇到与错误版本的Webpack有关的文章和问题,以下是我的版本:
显然,我将需要提供d.ts文件或使用require语句。
差不多好了...
对于常规需求,这就是我在tsx文件中使用它的方式:
const logo = require('../assets/logo.png');
...
<img alt='logo' style={{ width: 100 }} src={String(logo)} />
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。import
ing也不适合我。
错误TS2307: Cannot find module '../images/kitten-header.jpg'
突出表明 TypeScript 编译器不理解 .jpg 文件的导入。
webpack 配置良好,尽管编译错误,但图像文件已成功复制到 dist 文件夹,证明了这一点。
我们可以通过两种方法解决该问题。
首先,我们可以使用“require”语句绕过 TypeScript 导入。为此,导入...
import kittenHeader from '../images/kitten-header.jpg';
Run Code Online (Sandbox Code Playgroud)
...可以替换为 require...
const kittenHeader = require('../images/kitten-header.jpg');
Run Code Online (Sandbox Code Playgroud)
...这应该就是所需要的。
请注意,就我而言,我还需要安装一些类型来支持“require”语句。没有这些,我就会收到TS2304: Cannot find name 'require'
错误。
最初我使用了@types/node
,如这个 SO 答案中所述,但 @EvanSebastian 指出 Node 的目的是支持编写 NodeJS 模块,这不是我正在做的事情(请参阅对该问题的评论)。
我@types/webpack-env
按照建议尝试了,但这导致TS2322: Type '{ src: {}; }' is not assignable to type 'HTMLProps<HTMLImageElement>'.
我的图像标签的 src 属性出现错误。
最近,我改用 using @types/requirejs
,我希望它足够集中,以避免包含大量不适当的附加类型。目前正在工作:
npm install @types/requirejs --save-dev
Run Code Online (Sandbox Code Playgroud)
或者,我们可以保留导入并提供一个d.ts
包含声明适当模块的类型信息的文件。我无法确切地发现这个文件是什么样子。
归档时间: |
|
查看次数: |
13413 次 |
最近记录: |