webpack打包其他资源文件

Posted ~往无前

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack打包其他资源文件相关的知识,希望对你有一定的参考价值。

一、什么是loader?

  • 从webpack本身来说,主要是用作处理我们写的js代码,并且webpack会处理js之间的依赖。
  • 但是,在开发中我们不仅仅有基本的js代码处理,我们也需要加载css,图片,也包括一些高级的ES6转成ES5代码,将TypesScript代码庄臣ES5代码,将scss,less,转成css,将.jsx,.vue文件转成js文件等等。
  • 对于 webpack本身的能力来说,对于这些转化是不支持的。这时候我们就可以给webpack扩展对应的loader就可以了。loader让webpack能够去处理其他类型的文件,并将他们装换为有效模块,以供应用程序使用。以及添加到依赖图中。
    -loader使用
    步骤一:通过npm安装需要使用的loader
    步骤二:在webpack.config.js中的modules关键字进行配置

1.loader处理样式资源

1.1 依赖less文件

在入口文件中引入一个less文件

	import './css/index.less'

1.2 安装对应的loder

less-loader则对less文件进行加载,less是将less语法转译为css语法。

	npm install less less-loader -D

转译为css,还要使用import加载,这时候我们需要使用css-loader来加载css文件

 npm install css-loader -D

此时css的模块加载完成,最后还需要将导出的模块作为样式添加到DOM中,这时候我们就用到了style-loader

npm install style-loader -D
   //loader的配置
    module:{
        rules:[
            //详细的loader配置
            {   //表示.css结尾的文件
                test:/\\.css$/,
                //使用那些loader进行处理
                use:[
                    //user中的loader执行顺序,从右到左
                    //创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    //将css文件变成commonjs模块加载到js中,里面内容是样式字符串
                    'css-loader',
                ]
            },
            {
                test:/\\.less$/,
                user:[
                    'style-loader',
                    'css-loader',
                    //将less文件编译成css文件
                    'less-loader'
                ]
            }
        ]
    },

1.3将css导出为一个单独文件

将css文件打包成一个单独文件,这里我们需要使用一个插件来实现:

1.安装插件:

   npm install MiniCssExtractPlugin -D

2.文件配置

 module:{
        rules:[
           { 
               test:/\\.css$/,
               use:[
                //这个loader取代style-loader,作用:提取js中的css成单独文件
                   { loader:MiniCssExtractPlugin.loader,
                     options: {
                        esModule: false,
                        //表示输出的路径
                         publicPath: "../",
                    }
                },
                 'css-loader'            
                ]
            }
        ]
    },
 //插件使用
 plugins:[
        new MiniCssExtractPlugin({
        	//输出的文件名
            filename:'css/built.css'
        })
    ],

2.loader处理图片资源

当我们在项目中导入图片资源的时候,也需要将它进行打包为模块,这里也需要使用loader来处理图片

2.1 引入依赖

import img from './image.png'
//或者是在css文件中引入
background:ulr('./image.png')

2.2 安装相应的loader

url-loader功能类似于file-loader,用于将文件转换为base64URL格式。

	npm install url-loader -D

2.3文件配置

//处理图片资源
{
	test:/\\.(png/jpg/gif)$/,
	user:[
		//使用对象
		{loader:'url-loader',
		 option:{
		 limit:8192,
		 //添加一个name属性,img表示输出的文件夹名,[name]表示文件原名,hash5表示文件名的长度 ext:表示使用图片原来的后缀名
		 name:'img/[name].[hash:5].[ext]',
		 }
		 
		}
	]
}

1.option中的limit属性限制文件大小。文件大小小于指定的大小,则进行base64编码,减少http请求数量。返回一个DataURL。此时输出的图片资源是一个base64编码的文件。
2.如果文件体积等于或大于限制,默认情况下将使用file-loader并将所有参数传递给它。此时的图片文件是一个http请求,输出一个http的访问地址。

所以这里必须要安装file-loader这个包来处理图片:

	npm install file-loader -D

以上是关于webpack打包其他资源文件的主要内容,如果未能解决你的问题,请参考以下文章

webpack打包其他资源文件

webpack 打包和手动创建一个vue的项目

Webpack html资源打包

webpack五个核心模块

webpack 静态资源集中输出的方法示例

webpack5高级优化——代码运行性能