Ric*_*del 5 javascript node.js reactjs webpack
我有一个使用 webpack 和 React 的项目。我使用 file-loader / url-loader 在 webpack/react 设置中使用图像。在我的 React 项目中,我这样做了import Img from '/image/source/image.jpg',但是如果尝试<img src={Img}>src 是一个 Base64 代码module.exports = __webpack_public_path__ + "images/code.61e3a3939c2f93f30ac21419625c9a4f.jpg";,并且没有显示图像。我怎样才能解决这个问题?
var webpack = require( 'webpack' )
var path = require( 'path' )
var BUILD_DIR = path.resolve( __dirname, 'src/client/public' );
var APP_DIR = path.resolve( __dirname, 'src/client/App' );
var config = {
mode : 'development',
entry : APP_DIR + '/index.jsx',
output : {
path : BUILD_DIR,
filename : 'bundle.js'
},
devServer : {
publicPath : '/',
contentBase : './src/client'
},
module : {
rules : [
{
test : /\.jsx|js?/,
include : APP_DIR,
exclude : /(node_modules)/,
loader : 'babel-loader',
query : {
presets : [ 'env', 'react' ]
}
},
{
test : /\.scss|.css$/,
loaders : [ 'style-loader', 'css-loader', 'sass-loader' ]
},
{
test : /\.(png|jp(e*)g|svg)$/,
use : [{
loader : 'url-loader',
options : {
limit : 8000,
name : 'images/[hash]-[name].[ext]'
}
}]
},
{
test : /\.(png|jp(e*)g|svg)$/,
use : {
loader: "file-loader",
options: {
name: "images/[name].[hash].[ext]"
}
}
}
]
}
};
module.exports = config;
Run Code Online (Sandbox Code Playgroud)
我建议删除 webpack.config.js 中的文件加载器并仅使用 url-loader,因为这两个插件的工作原理类似。据我了解,Webpack 现在使用两个加载器处理您的图像文件,正如您指定的由以下内容触发的两个加载器一样。
test : /\.(png|jp(e*)g|svg)$/,
由于图像通过两个加载器运行,这可能就是您看到module.exports = __webpack_public_path__ + "images/code.61e3a3939c2f93f30ac21419625c9a4f.jpg";图像源的原因。
这是webpack 文档中关于 url-loader 的内容。
url-loader 的工作方式与 file-loader 类似,但如果文件小于字节限制,则可以返回 DataURL。
除此之外,您指示 webpack 对相同的文件扩展名使用不同的文件名,这也可能会产生问题。
url 加载器 >name : 'images/[hash]-[name].[ext]'
文件加载器 >name: "images/[name].[hash].[ext]"
我已经上传了这个GitHub 存储库,您可以查看。它按照您的建议加载图像。调整limiturl-loader 的设置并检查源以查看 url 从 base64 编码图像到 URL 的变化。
| 归档时间: |
|
| 查看次数: |
4122 次 |
| 最近记录: |