loader用于对模块的源代码进行转换,在import或加载其他模块前可以使用loader进行预处理,比如可以把typescript转换成JavaScript,通过这样也允许了在JavaScript中引入css和less/sass文件。
以在JavaScript中importcss文件为例,首先要引入两个npm包:style-loader和css-loader
style-loader用于将处理好的css代码注入到html文件中的style标签
css-loader用于在import css文件前进行预处理
1
| npm i style-loader css-loader -s
|
首先在根目录创建dist文件夹,src文件夹和webpack.config.js文件
在src下创建style文件夹存放css文件,编写css文件如下
1 2 3 4 5
| div { width: 100px; height: 100px; background-color: black; }
|
在src根目录下创建index.js文件并import css文件,创建一个dom并插入到页面中
1 2 3
| import './style/index.css'; document.body.appendChild(document.createElement('div'));
|
编写webpack.config.js文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const path = require('path'); module.exports = { entry: "./src/index.js", output: { filename: '[name].js', path: path.resolve(__dirname, 'dist') }, mode: 'development', module: { rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader'] }] } }
|
在dist文件夹下创建html文件,导入打包生成的main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script src="main.js"></script> </body> </html>
|
在页面中打开该文件,检查代码,发现css代码已经注入到style标签中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style type="text/css">div { width: 100px; height: 100px; background-color: black; } </style> </head> <body> <script src="main.js"></script> <div></div> </body> </html>
|
less/sass和css的处理相似,在module.rules中的use后加多一个less-loader/sass-loader进行处理即可,webpack-config.js修改如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const path = require('path'); module.exports = { entry: "./src/index.js", output: { filename: '[name].js', path: path.resolve(__dirname, 'dist') }, mode: 'development', module: { rules: [{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }] } }
|