Webpack - 使用文件加载器需要图像
Webpack - Require Images Using File-Loader
我正在为我的 React 应用程序使用 Webpack。
我在我的 webpack 配置中安装了 'File-loader' & 'Url-loader'。
但是,我不确定如何将图像 link 添加到我的组件中。我将图像的 'src' 保存在一个 'Data.js' 文件中,从那里我将图像的数据传递给反应组件。
我的webpack.config.js:
...
const PATHS = {
app : path.join( __dirname, "app" ),
build : path.join( __dirname, "build" )
};
const common = {
entry : {
app : PATHS.app
},
output : {
path : PATHS.build,
filename : "bundle.js"
},
module : {
preLoaders : [
...
loaders : [
{
test : /\.css$/,
loaders : [ "style", "css" ],
include : PATHS.app
},
{
test : /\.jsx?$/,
loader : "babel",
query : {
cacheDirectory : true,
presets : [ "react", "es2015" ]
},
include : PATHS.app
},
{
test : /\.(jpg|png)$/,
loader : "file-loader?name=[name].[ext]",
include : PATHS.app
}
...
我是我的 React 演示组件,我只是使用 require
来检索图像:
const PreviewTemImgParent = ({ data }) => {
let img = require( data.get( "src" ));
return(
<div className = "card previewImgParent">
<img
src = { img }
...
Data.js 文件有每个图像的绝对路径(主应用程序文件夹)(我在这里可能会出错):
export const previewTemImgData = Map({
body : List.of(
Map({ // using immutable.js
src : "app/css/asset/template/png/body/GatheredAtEmpireLine.png",
alt : "image",
className : "flipParent",
...
全局目录图像的价值:
我想知道我在哪里犯了错误以及如何解决这个问题?
编辑:
看了一圈,觉得webpack需要引用图片的相对位置,所以把webpack.config.js修改为:
...
output : {
path : PATHS.build,
publicPath : "/",
filename : "bundle.js"
}
...
但是,这并不能解决问题。指导将不胜感激。
webpack现在不支持异步资源,这意味着如果你想获取图片,你应该直接将图片的路径发送给它。就像这样:
let img = new Image();
img.src = require('./images/1.jpg');
image 的 url 不能是变量,因为 webpack bundle 你的代码时,它不会 运行 你的代码,所以无法知道你的值变量。
如果你真的想异步要求。你可以尝试使用 require.ensure
建议:
1.Use url-loader
图片。
通过在您的 webpack 配置中指定 limit
,例如:url-loader?limit=8000
,如果文件小于 8000 字节。 url-loader
作品看起来是 file-loader
。将文件嵌入到主条目的包输出中。如果不是,请参阅第 2 点。
2.Use url(地址)在css/scss中使用图片
这是一个由 Webpack 和 url-loader:
提供支持的示例
background: url('../images/heroBanner.png') no-repeat center center fixed;
并且由于文件足够大,webpack 将文件像其他包一样转换到输出目录。加载网页时,它将发送对此图像的 HTTP 请求。
我正在为我的 React 应用程序使用 Webpack。
我在我的 webpack 配置中安装了 'File-loader' & 'Url-loader'。
但是,我不确定如何将图像 link 添加到我的组件中。我将图像的 'src' 保存在一个 'Data.js' 文件中,从那里我将图像的数据传递给反应组件。
我的webpack.config.js:
...
const PATHS = {
app : path.join( __dirname, "app" ),
build : path.join( __dirname, "build" )
};
const common = {
entry : {
app : PATHS.app
},
output : {
path : PATHS.build,
filename : "bundle.js"
},
module : {
preLoaders : [
...
loaders : [
{
test : /\.css$/,
loaders : [ "style", "css" ],
include : PATHS.app
},
{
test : /\.jsx?$/,
loader : "babel",
query : {
cacheDirectory : true,
presets : [ "react", "es2015" ]
},
include : PATHS.app
},
{
test : /\.(jpg|png)$/,
loader : "file-loader?name=[name].[ext]",
include : PATHS.app
}
...
我是我的 React 演示组件,我只是使用 require
来检索图像:
const PreviewTemImgParent = ({ data }) => {
let img = require( data.get( "src" ));
return(
<div className = "card previewImgParent">
<img
src = { img }
...
Data.js 文件有每个图像的绝对路径(主应用程序文件夹)(我在这里可能会出错):
export const previewTemImgData = Map({
body : List.of(
Map({ // using immutable.js
src : "app/css/asset/template/png/body/GatheredAtEmpireLine.png",
alt : "image",
className : "flipParent",
...
全局目录图像的价值:
我想知道我在哪里犯了错误以及如何解决这个问题?
编辑: 看了一圈,觉得webpack需要引用图片的相对位置,所以把webpack.config.js修改为:
...
output : {
path : PATHS.build,
publicPath : "/",
filename : "bundle.js"
}
...
但是,这并不能解决问题。指导将不胜感激。
webpack现在不支持异步资源,这意味着如果你想获取图片,你应该直接将图片的路径发送给它。就像这样:
let img = new Image();
img.src = require('./images/1.jpg');
image 的 url 不能是变量,因为 webpack bundle 你的代码时,它不会 运行 你的代码,所以无法知道你的值变量。
如果你真的想异步要求。你可以尝试使用 require.ensure
建议:
1.Use url-loader
图片。
通过在您的 webpack 配置中指定 limit
,例如:url-loader?limit=8000
,如果文件小于 8000 字节。 url-loader
作品看起来是 file-loader
。将文件嵌入到主条目的包输出中。如果不是,请参阅第 2 点。
2.Use url(地址)在css/scss中使用图片
这是一个由 Webpack 和 url-loader:
提供支持的示例
background: url('../images/heroBanner.png') no-repeat center center fixed;
并且由于文件足够大,webpack 将文件像其他包一样转换到输出目录。加载网页时,它将发送对此图像的 HTTP 请求。