-
现在我在
src/css/style.css
文件中,设置全局的图片:/* 设置一张背景图片 */ body { background: url('../img/image.jpg'); }
-
在
index.js
文件中引入该css文件:// 导入 css 文件 import './css/style.css'
-
来看
webpack.config.js
的配置:// 导入 path 的 resolve 模块,进行路径拼接 const { resolve } = require('path'); // 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式 module.exports = { // 入口文件 entry: './src/index.js', // 出口文件 output: { // 打包到的目标地址,注意是绝对路径 path: resolve(__dirname, './build'), // 打包出去的文件名 filename: 'bundle.js' }, // 配置模块 module: { // 配置规则 rules: [ // 配置 css-loader { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, // 配置 file-loader { test: /\.(jpe?g|png|gif|svg)$/i, use: { loader: 'file-loader' } } ] } }
-
打包后,页面根本不显示图片,这个原因是url-loader、file-loader都是采用es6语法规范的,而不是commonjs规范,由于url-loader、file-loader中可以通过esModule属性来选择是否关闭es6语法规范。其实官网也说了在webpack5中也不再推荐使用file-loader、url-loader,但是任然想使用这两个loader打包css背景图片的话,需要在
webpack.config.js
文件中做如下配置:// 导入 path 的 resolve 模块,进行路径拼接 const { resolve } = require('path'); // 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式 module.exports = { // 入口文件 entry: './src/index.js', // 出口文件 output: { // 打包到的目标地址,注意是绝对路径 path: resolve(__dirname, './build'), // 打包出去的文件名 filename: 'bundle.js' }, // 配置模块 module: { // 配置规则 rules: [ // 配置 css-loader { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, // 配置 file-loader { test: /\.(jpe?g|png|gif|svg)$/i, use: { loader: 'file-loader', options: { esModule: false } }, type: 'javascript/auto' } ] } }
-
最主要的就是两段代码配置:
esModule: false
和type: 'javascript/auto'
,这个配置适用于file-loader和url-loader