我正在尝试在使用webpack和webpack-dev-server的项目中将图像显示在React组件中。
到目前为止,我已完成以下步骤:
- 使用npm安装了file-loader
- 更新了webpack.config.js以添加图片文件的加载器
- 将所需图片导入到我的组件中
- 在我的img标记中使用了这个导入
采取这些步骤后,webpack编译失败,出现“找不到模块”的错误:
ERROR in [at-loader] ./src/components/App.tsx:4:26
TS2307: Cannot find module '../images/kitten-header.jpg'.
我的文件夹结构如下:
/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
我添加到webpack.config.js的新装载程序是:
test: /\.(jpe?g|gif|png|svg)$/, loader: "file-loader?name=./images/[name].[ext]"
我已经在App.tsx中像这样导入了图像文件:
import kittenHeader from '../images/kitten-header.jpg';
...并在img标签中使用import,如下所示:
<img src={ kittenHeader } />
注意: 提供了webpack.config.js和App.tsx的完整文本,直到我接近答案时意识到它们并不相关(请参见更新1)。
我认为我在相对路径导入方面犯了一些非常微小的错误。正如您所想象的那样,我尝试了各种替代方案。
有人能提供一些见解吗?
供参考,因为我不断地碰到与错误版本的webpack有关的文章和问题,这里是我的版本:
- React 15.5.4
- Webpack 2.6.1
- Webpack-dev-server 2.4.5
- TypeScript 2.3.2
更新1: 2017.06.05
所以,看着这个SO问题和Medium上的这篇文章,我已经确定问题不在于如何使用webpack,而在于我正在使用TypeScript。错误是由于typescript编译器不知道什么是.jpg文件引起的typescript错误。
显然,我需要提供一个d.ts文件或使用require语句。
快到了...
@types/webpack-env
,而我使用的是@types/node
。Node 类型确实可以工作。这两者在让 'require' 工作方面有什么区别?我假设它们只是相同底层 'require' 实现的两个 d.ts 定义? - Montgomery 'monty' Jones@types/webpack-env
and@types/node
are different, you use@types/node
when you need to write NodeJS modules to make standard library typings available.@types/webpack-env
is used when you are in a webpack bundled project. For instance,require.ensure
will be available if you use@types/webpack-env
- Evan Sebastianexport default
具有类型string
。 - Evan Sebastian