48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/** @type {import('@vue/cli-service').ServicePlugin} */
 | 
						|
module.exports = (api, options) => {
 | 
						|
  const getAssetPath = require('../util/getAssetPath')
 | 
						|
 | 
						|
  const genAssetSubPath = dir => {
 | 
						|
    return getAssetPath(
 | 
						|
      options,
 | 
						|
      `${dir}/[name]${options.filenameHashing ? '.[hash:8]' : ''}[ext]`
 | 
						|
    )
 | 
						|
  }
 | 
						|
 | 
						|
  api.chainWebpack(webpackConfig => {
 | 
						|
    webpackConfig.module
 | 
						|
    .rule('svg')
 | 
						|
      .test(/\.(svg)(\?.*)?$/)
 | 
						|
      // do not base64-inline SVGs.
 | 
						|
      // https://github.com/facebookincubator/create-react-app/pull/1180
 | 
						|
      .set('type', 'asset/resource')
 | 
						|
      .set('generator', {
 | 
						|
        filename: genAssetSubPath('img')
 | 
						|
      })
 | 
						|
 | 
						|
    webpackConfig.module
 | 
						|
      .rule('images')
 | 
						|
        .test(/\.(png|jpe?g|gif|webp|avif)(\?.*)?$/)
 | 
						|
        .set('type', 'asset')
 | 
						|
        .set('generator', {
 | 
						|
          filename: genAssetSubPath('img')
 | 
						|
        })
 | 
						|
 | 
						|
    webpackConfig.module
 | 
						|
      .rule('media')
 | 
						|
        .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/)
 | 
						|
        .set('type', 'asset')
 | 
						|
        .set('generator', {
 | 
						|
          filename: genAssetSubPath('media')
 | 
						|
        })
 | 
						|
 | 
						|
    webpackConfig.module
 | 
						|
      .rule('fonts')
 | 
						|
        .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i)
 | 
						|
        .set('type', 'asset')
 | 
						|
        .set('generator', {
 | 
						|
          filename: genAssetSubPath('fonts')
 | 
						|
        })
 | 
						|
  })
 | 
						|
}
 |