实现file-loader
和url-loader
yarn add mime
其主要用途是设置某种扩展名的文件的响应程序类型
创建file-loader.js1
// 拿到babel的参数 需要工具 loaderUtils
let loaderUtils = require('loader-utils')
function loader(source) { // loader的参数就是源代码
// file-loader需要返回路径
let filename = loaderUtils.interpolateName(this, '[hash].[ext]', {content: source })
this.emitFile(filename, source) // 发射文件
console.log('loader1');
return `module.exports="${filename}"`
}
loader.raw = true // 二进制
module.exports = loader
创建url-loader1.js
// 拿到babel的参数 需要工具 loaderUtils
let loaderUtils = require('loader-utils')
let mime = require('mime') // 途是设置某种扩展名的文件的响应程序类型
function loader(source) { // loader的参数就是源代码
let {limit} = loaderUtils.getOptions(this)
console.log(this.resourcePath);
if (limit && limit > source.length) {
return `module.exports="data:${mime.getType(this.resourcePath)};base64,${source.toString('base64')}"`
} else {
return require('./file-loader1').call(this, source)
}
}
loader.raw = true // 二进制
module.exports = loader
webpack.config.js
{
test: /\.png$/,
// 目的是根据图片生成md5 发射到dist目录下,file-loader 返回当前图片路径
// use: 'file-loader'
// 处理路径
use: {
loader: 'url-loader1',
options: {
limit: 200 * 1024
}
}
}
index.js
引入图片
import p from './photo.png'
let img = document.createElement('img')
img.src = p
document.body.appendChild(img);